在C中将无符号整数转换为字节数组

时间:2012-01-24 15:50:19

标签: c arrays int

您能解释一下如何将最后3个字节的数据从无符号整数转换为字符数组吗?

示例:

unsigned int unint = some value;
unsigned char array[3];

4 个答案:

答案 0 :(得分:5)

如果必须将其转换为数组,则会更加困难,但如果您只想访问各个字节,则可以执行

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 :(得分:5)

你可以使用按位右移运算符:

array[0] = unint;
array[1] = unint >> 8;
array[2] = unint >> 16;

uint的最不重要字节存储在数组的第一个元素中。

答案 2 :(得分:0)

根据您的需要,您可能更喜欢工会:

typedef union {
    unsigned int  unint;
    unsigned char array[3];  
} byteAndInt;

或位移操作:

for(int i=0; i<3; i++)
    array[i] = (unint>>8*i) & 0xFF;

前者不是以字节顺序安全的。

答案 3 :(得分:0)

如果是最后三个,你的意思是 lsb + 1 lsb + 2 msb (换句话说,除了<之外的每个字节em> lsb ),然后就可以使用它了。

unsigned int unint = some value;
unsigned char * array = ( (unsigned char*)&some_value ) + 1;