1

重複の可能性:
int を 4 バイトの char 配列に変換する (C)

Dynamic C プログラム (言語は C) を使用して、int を 4 桁の長さのバイト配列に変換しようとしています。これまでのところ、オンラインで調べたところ、いくつかの例が見つかりました。しかし、どれも私にはうまくいかないようです。正しいバイト番号が出力されるという継続的な問題が発生しましたが、何らかの理由でそれらが 2 回繰り返されます。以下のコードを提供しました。

void main(){
 int a=1379;
 int i=0;
 unsigned char value [4];

value[3] = (byte) (a & (0xFF));
value[2] = (byte) ((a >> 8) & 0xFF);
value[1] = (byte) ((a >> 16) & 0xFF);
value[0] = (byte) ((a >> 24) & 0xFF);
//convert int values to bytes by placing them in a char buffer

for(i=0;i<4;i++){
 printf("%d",value[i]);
 printf(", ");
 }
printf("\n");
}

たとえば、この値を使用すると、プログラムは "0, 0, 5, 99" を出力すべきときに "5, 99, 5, 99" を出力します。ご協力ありがとうございました。

4

3 に答える 3

4

「ダイナミック C」がint16 ビットの実装であることはほぼ確実であり、これは C にとって完全に「合法的」です。intが 16 ビットの場合、16 ビットを超えるシフトはモジュロ 16 であるため、2 番目の 2 つのシフトが複製されます。最初の二つ。

于 2012-07-11T19:22:11.493 に答える
1

int 変数のビットを char-array にコピーする必要があります。memcpy次のように簡単に実行できます。

#include <stdio.h>
#include <string.h>

void split(int val, unsigned char *arr) {
    memcpy(arr, &val, sizeof(int));
}

int main() {
    unsigned char bytes[4];
    split(1379, bytes);
    printf("%d, %d, %d, %d\n", bytes[0], bytes[1], bytes[2], bytes[3]);
}
于 2012-07-11T21:18:15.440 に答える
0
#include <stdio.h>
#include <string.h>

int main(void){
 int a=1379;
 unsigned bot,top ;
 unsigned char value [sizeof a];

 memcpy (value, &a, sizeof value);

 /* You can omit this loop if you are on a big-endian machine */
#if LITTLE_ENDIAN
 for (bot =0, top = sizeof value; --top > bot; bot++) {
    unsigned char tmp;
    tmp = value[bot];
    value [bot] = value[top];
    value[top] = tmp;
    }
#endif

for(bot=0;bot < sizeof value;bot++){
 printf("%u", (unsigned int) value[bot]);
 printf(", ");
 }
printf("\n");
return 0;
}
于 2012-07-11T19:29:08.493 に答える