C Big Endian 到 Little Endian 结构

标签 c struct endianness

我有一个定义为的结构:

struct record
{
   int age;
   char name[12];
   int department;
};

如果我从二进制文件中读取数据并且数据包含结构,我对如何解决这个问题感到困惑,我如何才能将该结构中的位顺序从大端反转为小端?

最佳答案

下面是一个简单的字节序转换实现:

// Convert from big to little or vice versa
void convert_record (struct record *bigLittle) {
    int x, temp;

    temp = bigLittle->age;

    for (x = 0; x < sizeof (int); x++) {
        ((char *)&(bigLittle->age))[x] = ((char *)&temp)[sizeof (int) - x]
    }

    temp = bigLittle->department;

    for (x = 0; x < sizeof (int); x++) {
        ((char *)&(bigLittle->department))[x] = ((char *)&temp)[sizeof (int) - x]
    }

    return;
}

但是,正如 Michael Foukarakis 上面指出的那样,您确实应该使用 ntohs和 friend 。

关于C Big Endian 到 Little Endian 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21713931/

相关文章:

c - 在 Header 中声明 Struct 并在多个 Source 中使用

c++ - 64 位 int64_t 在 32 位系统上的字节顺序

c - 两个多字节整数,大端和小端之间的区别

c - 位移是否取决于字节顺序?

c - 在代码中在这里做什么?

c - 如何解释稍微复杂的指针声明

c - 我试图制作绘制 8x8 chesstable 的 c 数组。请帮帮我吗?

c - 分配一个新的调用堆栈

c++ - fin.ignore()跳过文件中的行?

c - 给定一个指向结构中成员 a 的指针,编写一个返回指向该结构的指针的例程