我必须从输入读取4字节块(见下文)。
#include <stdio.h>
#include <stdlib.h>
unsigned char input[4][8] = {{'A', 'B','C','D','A','B','C','D'},
{'A', 'B', 'C', 'D','A', 'B', 'C', 'D'},
{'A', 'B', 'C', 'D','A', 'B', 'C', 'D'},
{'A', 'B', 'C', 'D','A', 'B', 'C', 'D'}
};
unsigned char output[4][2];
int main(void) {
int line_num;
unsigned int *ptr=(unsigned int*)&input;
for (line_num=0; line_num < 4*2; line_num++) {
unsigned char *arr1 = ( (unsigned char*)ptr );
printf("==> line_num %d: %c%c%c%c\n", line_num, *arr1, *(arr1+1), *(arr1+2), *(arr1+3));
ptr++;
}
return EXIT_SUCCESS;
}现在我只是使用一个整数指针来读取4个字节,并使用一个char*指针在4个字节的块中进行迭代;这对高字节的字节顺序有效,但对低字节的字节顺序无效。在"C“中有没有更通用和顺序独立的方法来解决这个问题呢?
发布于 2015-07-02 23:05:11
首先,不要将char buffer解释为无符号int。必须将该值复制到有效的对象。
为了避免字节序问题,请决定在传输中使用哪个顺序,然后转换将独立于平台。
假设传输中的数据是低端的(并且值是合理的),您将获得如下值:(这适用于任何平台)
unsigned char data[4] = ... ;
uint32_t value = (data[0] << 0) | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);反之亦然,如果它是大端的。
https://stackoverflow.com/questions/31187379
复制相似问题