- ベストアンサー
文字の書式変換に関して
初心者です。 文字の書式変換に関してよくわからないので質問いたします。 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++ です
- みんなの回答 (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
その他の回答 (1)
- asuncion
- ベストアンサー率33% (2127/6289)
実体はいずれにしても0x00です。 それをどういう風に出力したいかによって、 %cや%xなどの書式制御文字を使い分ければよいです。
お礼
ご返答ありがとうございます。 ご丁寧に説明してくださったおかげで 理解できました。 まだまだよくわからないことが多いですががんばりたいと思います。 ありがとうございました。