最後の3バイトのデータを符号なし整数から文字配列に変換する方法について説明できますか?符号なし整数をCのバイト配列に変換する
例:
unsigned int unint = some value;
unsigned char array[3];
最後の3バイトのデータを符号なし整数から文字配列に変換する方法について説明できますか?符号なし整数をCのバイト配列に変換する
例:
unsigned int unint = some value;
unsigned char array[3];
あなたは配列に変換する必要がある場合、それはより困難だが、あなただけの個々のバイトにアクセスする場合、その後、あなたは
char* bytes = (char*)&unint;
を行うことができます実際に配列を作成したいので(最後の3バイトのコピーを作成し、それらをそのまま残さない)、
unsigned char bytes[3]; // or char, but unsigned char is better
bytes[0] = unint >> 16 & 0xFF;
bytes[1] = unint >> 8 & 0xFF;
bytes[2] = unint & 0xFF;
+1、なぜ '&0xFF'が必要ですか? – rubndsouza
必要に応じて、あなたが労働組合を好むことがあります。
typedef union {
unsigned int unint;
unsigned char array[3];
} byteAndInt;
またはビットシフト操作は:
for(int i=0; i<3; i++)
array[i] = (unint>>8*i) & 0xFF;
は、前者はエンディアン安全ではありません。
ユニオンの一人のメンバーに書き込み、最初に書き込むことなく他のメンバーを読むのはUBではないのですか? –
標準の@Seth UBですが、これまでに遭遇したすべてのコンパイラでよく定義されています。 –
ユニオンは、同じメモリゾーンが複数の方法で解釈できることを指定します。これは、1つのフィールドを書き込んで別のフィールドを読み込むことを目的としています。もちろん、ビッグエンディアンのマシンとリトルエンディアンのマシンで同じコードを実行すると、異なる結果が得られます。 UBではなく移植性の問題です。 – mouviciel
最後の3によるならば、あなたは、あなたがこれを使用することができます(LSB以外の言葉ですべてのバイト)LSB + 1、LSB + 2とMSBを意味します。
unsigned int unint = some value;
unsigned char * array = ((unsigned char*)&some_value) + 1;
*最後の3バイト*はどういう意味ですか? –
私は彼が最下位3バイトを意味すると思うが、私は間違っているかもしれない。 – Nick