首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C中与字节顺序无关的I/O

C中与字节顺序无关的I/O
EN

Stack Overflow用户
提问于 2015-07-02 22:30:20
回答 1查看 505关注 0票数 4

我必须从输入读取4字节块(见下文)。

代码语言:javascript
复制
#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“中有没有更通用和顺序独立的方法来解决这个问题呢?

EN

回答 1

Stack Overflow用户

发布于 2015-07-02 23:05:11

首先,不要将char buffer解释为无符号int。必须将该值复制到有效的对象。

为了避免字节序问题,请决定在传输中使用哪个顺序,然后转换将独立于平台。

假设传输中的数据是低端的(并且值是合理的),您将获得如下值:(这适用于任何平台)

代码语言:javascript
复制
unsigned char data[4] = ... ;

uint32_t value = (data[0] << 0) | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);

反之亦然,如果它是大端的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31187379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档