• ベストアンサー

文字列と整数型について

はじめまして。 どうしても困っているのでヒントでも良いのでおねがいします。 関数内(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; 小さな文字列型に整数型をどのように渡せばよいのかが 一番疑問に思っているところです。 整数型に文字列型を代入する場合には 文字列のバイト指定とシフト演算で実現できています。 ヒントでもよいのでお願いします。

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

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★アドバイス >整数型に文字列型を代入する場合には >文字列のバイト指定とシフト演算で実現できています。  ↑  これと逆の操作をすれば良いのです。 サンプル: 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』 }

ring_rollo
質問者

お礼

早速の回答ありがとうございます。 なるほど、考え方は同じで 最小単位にあわせてあげればよいのですね。

その他の回答 (2)

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

★この手の処理は、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" ); } 注:インデントに全角空白を用いています。   タブに一括変換して下さい。

ring_rollo
質問者

お礼

エンディアンについてはバイト指定してあげているので、 ここでは何も問題ないということですね。 2回も回答いただき大変勉強になりました。 ありがとうございます。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

エンディアンがからむので、少し工夫がいりそうです。

ring_rollo
質問者

お礼

そうですね。 実行環境に合わせるしかないのかなと思いましたが それはなんだか気持ち悪いですね。

関連するQ&A