2017-07-10 6 views
0

私はビットシフトを行う方法を知っていますが、私の値は端から外れているように見え、8ビットを保存しようとすると元の値を失います。符号なし16ビット整数の場合符号なし16ビットと符号なし32ビット整数を符号なし8ビットメモリ配列に符号化するにはどうすればよいですか?

+0

これは非常によく興味深い質問かもしれないが、あなたはより多くの情報を提供する必要があるとしている - 例えば、サンプルコード、サンプル入力、および問題を示すサンプル出力を。 [mcve] – davidbak

答えて

1

:符号なし32ビット整数の場合

unsigned short val16 = 0x1234; 
unsigned char enc[2]; 
enc[0] = val16 & 0xff;    // stores 0x34 to enc[0] 
enc[1] = val16 >> 8 & 0xff;   // stores 0x12 to enc[1] 

10進リテラルと

unsigned int val32 = 0x12345678; 
unsigned char enc[4]; 
enc[0] = val32 & 0xff;    // stores 0x78 to enc[0] 
enc[1] = val32 >> 8 & 0xff;   // stores 0x56 to enc[1] 
enc[2] = val32 >> 16 & 0xff;  // stores 0x34 to enc[2] 
enc[3] = val32 >> 24 & 0xff;  // stores 0x12 to enc[3] 

更新

全く同じコードです。

unsigned short val16 = 4660;  // 4660 = 0x1234 
unsigned char enc[2]; 
enc[0] = val16 & 255; 
enc[1] = val16 >> 8 & 255; 

unsigned int val32 = 305419896; // 305419896 = 0x12345678 
unsigned char enc[4]; 
enc[0] = val32 & 255; 
enc[1] = val32 >> 8 & 255; 
enc[2] = val32 >> 16 & 255; 
enc[3] = val32 >> 24 & 255; 
+0

ありがとう! 16進データ型を使用せずにこれを行うことは可能ですか? – bigdog225

+0

@ bigdog225はい、もちろんです。答えでは、各バイトの境界を2バイトまたは4バイトの値で明確にするために、16進リテラルを使用しました。小数などの他のリテラル型を使用できます。 – nglee

+0

小数点でどうすればいいですか?あなたが私を見せてもらわない場合 – bigdog225

関連する問題