質問 |
||
| 質問者:ring_rollo | 文字列と整数型について | |
|---|---|---|
困り度:
|
はじめまして。 どうしても困っているのでヒントでも良いのでおねがいします。 関数内(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; 小さな文字列型に整数型をどのように渡せばよいのかが 一番疑問に思っているところです。 整数型に文字列型を代入する場合には 文字列のバイト指定とシフト演算で実現できています。 ヒントでもよいのでお願いします。 |
|
質問投稿日時:08/05/02 00:10 質問番号:3991222 |
||
回答良回答10pt |
|
| 回答者:yama5140 | ★この手の処理は、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" ); } 注:インデントに全角空白を用いています。 タブに一括変換して下さい。 |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/05/02 10:46 回答番号:No.3 |
|
| この回答へのお礼 | エンディアンについてはバイト指定してあげているので、 ここでは何も問題ないということですね。 2回も回答いただき大変勉強になりました。 ありがとうございます。 |
回答 |
|
| 回答者:asuncion | エンディアンがからむので、少し工夫がいりそうです。 |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/05/02 00:49 回答番号:No.2 |
|
| この回答へのお礼 | そうですね。 実行環境に合わせるしかないのかなと思いましたが それはなんだか気持ち悪いですね。 |
回答良回答20pt |
|
| 回答者:Oh-Orange | ★アドバイス >整数型に文字列型を代入する場合には >文字列のバイト指定とシフト演算で実現できています。 ↑ これと逆の操作をすれば良いのです。 サンプル: 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』 } |
|---|---|
| 種類:回答 どんな人:専門家 自信:自信あり |
|
| |
回答日時:08/05/02 00:28 回答番号:No.1 |
|
| この回答へのお礼 | 早速の回答ありがとうございます。 なるほど、考え方は同じで 最小単位にあわせてあげればよいのですね。 |