- ベストアンサー
文字列と整数型について
はじめまして。 どうしても困っているのでヒントでも良いのでおねがいします。 関数内(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; 小さな文字列型に整数型をどのように渡せばよいのかが 一番疑問に思っているところです。 整数型に文字列型を代入する場合には 文字列のバイト指定とシフト演算で実現できています。 ヒントでもよいのでお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
★アドバイス >整数型に文字列型を代入する場合には >文字列のバイト指定とシフト演算で実現できています。 ↑ これと逆の操作をすれば良いのです。 サンプル: void func2( char *p ) { int tmp = 0x10101100; *p++ = (char)(tmp >> 8*3); ←0xAABBCCDDの『0xAA』 *p++ = (char)(tmp >> 8*2); ←0xAABBCCDDの『0xBB』 *p++ = (char)(tmp >> 8*1); ←0xAABBCCDDの『0xCC』 *p++ = (char)(tmp >> 8*0); ←0xAABBCCDDの『0xDD』 }
その他の回答 (2)
- yama5140
- ベストアンサー率54% (136/250)
★この手の処理は、unsigned char が無難です。 A,B を換えて試して下さい。 >エンディアンがからむので、少し工夫がいりそうです。 ★心配無用かと・・。 #include <stdio.h> //#define un_char char // A #define un_char unsigned char // B void main() { int tmp = 0x80706050; un_char bit[4]; bit[0] = (un_char)( ( tmp >> 24 ) & 0xFF ); bit[1] = (un_char)( ( tmp >> 16 ) & 0xFF ); bit[2] = (un_char)( ( tmp >> 8 ) & 0xFF ); bit[3] = (un_char)( tmp & 0xFF ); printf( "%02X ", bit[0] ); printf( "%02X ", bit[1] ); printf( "%02X ", bit[2] ); printf( "%02X ", bit[3] ); printf( "\n" ); } 注:インデントに全角空白を用いています。 タブに一括変換して下さい。
お礼
エンディアンについてはバイト指定してあげているので、 ここでは何も問題ないということですね。 2回も回答いただき大変勉強になりました。 ありがとうございます。
- asuncion
- ベストアンサー率33% (2127/6289)
エンディアンがからむので、少し工夫がいりそうです。
お礼
そうですね。 実行環境に合わせるしかないのかなと思いましたが それはなんだか気持ち悪いですね。
お礼
早速の回答ありがとうございます。 なるほど、考え方は同じで 最小単位にあわせてあげればよいのですね。