• ベストアンサー

文字の書式変換に関して

初心者です。 文字の書式変換に関してよくわからないので質問いたします。 int pandegree=15; PANdegree[4]={0x00,0x00,0x00,0x00}//初期化 sprintf(PANdegree,"%04x",pandegree);//pandegreeを4桁16進数に変換して文字列PANdegreeに格納 この時点でPANdegreeに16進数4桁の値が以下のように入っています。 PANdegree[0]=0; PANdegree[1]=0; PANdegree[2]=0; PANdegree[3]=0; これをこのまま16進数として1文字ずつ別の文字列char pantiltに代入したいのですが、 char pantilt[10]={0x81,0x01,0x06,0x02,0X10,0X10,0X00,0X00,0X00,0X00,0XFF}; pantilt[6]=PANdegree[0]; pantilt[7]=PANdegree[1]; pantilt[8]=PANdegree[2]; pantilt[9]=PANdegree[3]; この時点で、PANdegree[0],PANdegree[1],PANdegree[2],PANdegree[3]に入っている文字は、%C(1文字)として認識されているのでしょうか? これを%Xとして認識させることはできませんでしょうか? まったくの初心者なので、勘違いだらけの質問かもしれませんがどうぞよろしくお願いいたします。 開発環境は Windows XP Visual Studio2005 C++ です

質問者が選んだベストアンサー

  • ベストアンサー
  • yama5140
  • ベストアンサー率54% (136/250)
回答No.2

・文字と数の違い(アスキーコード)。 ・それを表現するには(フォーマット指定子)。 の2点をおさえれば・・・。 >この時点で、PANdegree[0],PANdegree[1],PANdegree[2],PANdegree[3] >に入っている文字は、%C(1文字)として認識されているのでしょうか? >これを%Xとして認識させることはできませんでしょうか? ★「認識」するのは、《あなた》です。 ★質問文冒頭の10進数 15 を16進数4桁の『文字列』に変換(%04x)すると・・。  10進数 15 は16進数 f なので 000f という文字列に変換されます。  この文字列 000f は、00110000 00110000 00110000 01100110 (00000000)  と、文字列変数に8ビットずつ格納されます(「アスキーコード」参照)。 ★これを、《あなた》が、  「%c(1文字)として認識」すると、'0','0','0','f'です。  「%x(1文字)として認識」すると、'30','30','30','66'です。   (1文字では表せずオーバーフロー)  ◆格納された 00110000 00110000 00110000 01100110 を《どう表現》するか、の違いだけです(「フォーマット指定子」参照)。  ◆「認識させる」必要はまったくありません。 (変換が %04X の場合は、f を F に、66 を 46 に、01100110 を 01000110 に読み替えて・・) 【蛇足】 >char pantilt[10] = { 0x81, 0x01, 0x06,・・  アスキーコードの範囲を超えています。unsigned にしましょう。 アスキーコード http://e-words.jp/p/r-ascii.html フォーマット指定子 http://www.k-cube.co.jp/wakaba/server/format.html

iga_tata
質問者

お礼

ご返答ありがとうございます。 ご丁寧に説明してくださったおかげで 理解できました。 まだまだよくわからないことが多いですががんばりたいと思います。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.1

実体はいずれにしても0x00です。 それをどういう風に出力したいかによって、 %cや%xなどの書式制御文字を使い分ければよいです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 文字列変換プログラムのポインタについて

    いかの関数は、文字列を16進文字列に変換する関数です。過去の質問を参考に自分で作りました。 動作することはするんですが、よく見るとpoとpiは領域確保していません。これってプログラム上まずいでしょうか。 char *conv( char *buff, char *str ) {   char *po;   char *pi;   for(po=buff, pi=str; *pi; pi++)   {     if(0 <= *pi && *pi <= 15)     {       sprintf(po, "%x", 0);       po++;       sprintf(po, "%x", *pi);       po++;     }else {       sprintf(po, "%x", (0x0f & (*pi >> 4)));       po++;       sprintf(po, "%x", (0x0f & (*pi % 16)));       po++;     }   }   *po='\0';   return(buff); }

  • C言語で整数を文字列へ型変換

    C言語で整数を文字列へ型変換 int result[11]; const char *tmp; resultの中の11個の数字を 1,2,3,4,5,6,7,8,9,10,11 のような文字列にして、tmpへ代入したんですが、やり方が分かりません。 Cの初心者ですので、教えていただきたいです。

  • 数字を文字型に変換する

     今日はCの初心者です。  数字を文字型に変換するのはsprintf以外に無いのでしょうか。  sprintfは変換後の数字を配列に入れるようになっていますが、使いにくいです、もっと簡単にキャストできないのでしょうか。  宜しくお願いします。

  • C言語の文字列について

    C言語で文字列のヌルについて、理解があいまいな点があり、教えて欲しいのですが、以下のようにsprintfで書式し代入した際に最後は0(ヌル文字)をセットしてくれるのでしょうか?4バイト目の文字が何か知りたいです。 char temp[100];時では0で初期化されていることは保障されていませんが、大抵は0で埋まっていますが、sprintfの仕様が知りたいです。 char temp[100]; sprintf(temp, "test");とした時に 01234バイト目 test?????????????.... 話は変わりますが、以下のようにするとエラーになりましたが、 特定の位置の値をセットする方法はどのようなものがあるのでしょうか? temp[10] = (temp[10] == '0') ? (char)'1' : (char)'0';

  • VC String型のエンディアン変換

    お世話になります String型の文字列のそれぞれの文字(一文字ずつ)の エンディアンを変更したいのですが、簡単な方法はないでしょうか? 今考えている方法は Stringから一文字ずつcharに入れ込んで このcharをシフトとマスクで入れ替える方法なのですが ((val<<8) & 0xff00) | ((val>>8) & 0x00ff) エンディアン変換の前後でString⇒charとchar⇒Stringを行うので、 少し煩雑になるのが気になっております。 型変換無しでエンディアン変換できないでしょうか

  • sprintf関数での文字列変換について

    マイコンにて、 C言語で浮動小数点の数値を表示するプログラムを作成しているのですが、 PRINT_OUT("123.456"); のように、文字列を直接指定した場合は正しく表示されるのですが、 sprintf()関数を用いて、浮動小数点を文字列に変換した場合、 buf char[10]; sprintf(buf,"%lf",123.456); PRINT_OUT(buf); とした場合はプログラムが暴走?(恐らく配列破壊を起こしていると 思われますが、)してしまい、上手く動作しません。 (但し、整数の場合は正常に動作します。) そこで、質問させていただきたいのですが、 "123.456"のように直接文字列を指定した場合と、浮動小数点123.456 をsprintf()関数を用いて文字列に変換した"123.456"の書式に何か 違いはあるのでしょうか?よろしくお願い致します。

  • 文字列をint型に変換したいのですが

    文字列をint型に変換して、計算に使用したいのですが うまくいきません。 char moji[0] = '1' moji[1] = '2' moji[2] = '3' この文字列をひとつずつint型の変数に代入したいのですが atoi関数を使用した場合、文字列全ての値が変換されてしまいます。 どうしたらいいのでしょうか? お答えいただけるとありがたいです。

  • 文字列と整数型について

    はじめまして。 どうしても困っているのでヒントでも良いのでおねがいします。 関数内(func1)で確保した文字列変数のポインタを 別の関数(func2)にポインタ渡しします。 func2内で整数型で計算した結果を引数で示された文字列変数に 代入するというようなことをしたいと思ってます。 ここで、intは4byteとします。 メモリ長だけで見ると、bit[4] = tmp です。 void func1(){ char bit[4]; func2(bit); return; } void func2(char* p){ int tmp = 0x10101100; p = tmp; <---- ??? return; } そこでどのようにすれば、 代入することができるのか分かりません。 以下のような結果になるように代入したいと思っています。 bit[0] = 0x10; bit[1] = 0x10; bit[2] = 0x11; bit[3] = 0x00; 小さな文字列型に整数型をどのように渡せばよいのかが 一番疑問に思っているところです。 整数型に文字列型を代入する場合には 文字列のバイト指定とシフト演算で実現できています。 ヒントでもよいのでお願いします。

  • 文字を16進変換

    C言語にて関数などを使わずに計算式なので文字を16進数に変換したいのですがどのような処理にしたらいいでしょうか?? char型で用意した変数に1文字を格納し、それをアスキーコードの16進数に変換したいです。 よろしくお願いします。

  • ORACLEの文字コード変換について

    「~」を文字コード変換する時に javaの中で、「0x301c」→「0xff5e」という変換をしておりますが、 「・」を文字コード変換を同様にしたいのですが、 文字コードがわかりませんので、教えてください。 また、他にも怪しいと思われる文字コードを教えてください。