我有一个定义为的结构:
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/