【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?

はじめまして。
どうしても困っているのでヒントでも良いのでおねがいします。

関数内(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;

小さな文字列型に整数型をどのように渡せばよいのかが
一番疑問に思っているところです。
整数型に文字列型を代入する場合には
文字列のバイト指定とシフト演算で実現できています。

ヒントでもよいのでお願いします。

A 回答 (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』
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/05/02 01:16

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

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

お礼日時:2008/05/03 01:41

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2008/05/02 01:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!