将int转换为C中的4字节char数组

时间:2012-07-11 19:07:53

标签: c arrays char byte

  

可能重复:
  Converting an int into a 4 byte char array (C)

使用Dynamic C程序(语言为C),我试图将int转换为4个字节长的字节数组。到目前为止,我已经在线查看,并找到了一些例子。但是,似乎没有一个对我有用。我一直存在打印正确字节数的问题,但出于某种原因它们会重复两次。我提供了以下代码:

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");
}

例如,使用此值时,程序将打印“5,09,5,99”,此时应打印“0,0,5,99”。谢谢你的帮助。

3 个答案:

答案 0 :(得分:4)

几乎可以肯定的是,“动态C”是一个16位int的实现,对C来说是完全“合法的”。如果int是16位,任何转换都是16位是模16,所以后两个位移复制前两个。

答案 1 :(得分:1)

您需要将int变量中的位复制到char数组中。您只需使用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]);
}

答案 2 :(得分: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;
}