unsigned int を変換して 2 文字に分割したい。例: 整数が 1 の場合、そのバイナリ表現は 0000 0001 になります。1 つの char 変数に 0000 の部分を入れ、別のバイナリ変数に 0001 の部分を入れたいとします。Cでこれを達成するにはどうすればよいですか?
11865 次
6 に答える
6
あなたが持っていると主張する場合sizeof(int)==2
:
unsigned int x = (unsigned int)2; //or any other value it happens to be
unsigned char high = (unsigned char)(x>>8);
unsigned char low = x & 0xff;
合計 8 ビット (1 バイト) があり、それを 2 つの 4 ビット値に分割する場合:
unsigned char x=2;// or whatever
unsigned char high = (x>>4);
unsigned char low = x & 0xf;
于 2013-02-19T05:24:42.353 に答える
3
番号の必要な部分をシフトしてマスクします。unsigned int はおそらく 4 バイトで、4 バイトすべてが必要な場合は、上位バイトを 16 と 24 シフトするだけです。
unsigned char low = myuint & 0xff;
unsigned char high = (myuint >> 8) & 0xff;
于 2013-02-19T05:23:35.777 に答える
2
機能する 1 つの方法は次のとおりです。
typedef union
{
unsigned char c[sizeof(int)];
int i;
} intchar__t;
intchar__t x;
x.i = 2;
xc[] (配列) は整数を一連の文字として参照しますが、バイト エンディアンの問題があります。これらは、プログラミングしているプラットフォームの適切な #define 値で対処できます。これは Justin Meiners が提供した回答に似ていますが、少しすっきりしています。
于 2013-02-19T06:27:40.833 に答える
2
これは sizeof で 16 ビット整数チェックを想定しています!! 私のプラットフォームでは int は 32 ビットなので、このコード例では short を使用します。私のは、ポインターを引き離すという点で最も嫌なものとして賞を受賞しましたが、それは私が理解するのに最も明確でもあります.
unsigned short number = 1;
unsigned char a;
a = *((unsigned char*)(&number)); // Grab char from first byte of the pointer to the int
unsigned char b;
b = *((unsigned char*)(&number) + 1); // Offset one byte from the pointer and grab second char
于 2013-02-19T05:29:22.403 に答える
0
int i = 1 // 2 Byte integer value 0x0001
unsigned char byteLow = (i & 0x00FF);
unsinged char byteHigh = ((i & 0xFF00) >> 8);
byteLow の値は 0x01で、byteHigh の値は 0x00 です。
于 2013-02-19T05:27:20.297 に答える
0
unsigned short s = 0xFFEE;
unsigned char b1 = (s >> 8)&0xFF;
unsigned char b2 = (((s << 8)>> 8) & 0xFF);
私が考えることができる最も簡単な。
于 2013-02-19T05:23:25.910 に答える