如何将无符号短整数的字节c进行交换,构成一个长尾?
- 内容介绍
- 文章标签
- 相关推荐
本文共计434个文字,预计阅读时间需要2分钟。
我有部分工作涉及写入文件。我有一个类型为unsigned short int的数组arr,每个元素必须以二进制格式写入文件。我的初始解决方案是:
for(i=0; i 我有一个类型为unsigned short int的数组arr,每个元素必须以二进制格式写入文件. 我的初始解决方案是: for(i = 0; i < ROWS; i++) {
fwrite(&arr[i], 1, sizeof(unsigned short int), source);
}
上面的代码在将无符号短整数写入文件时起作用.此外,source是指向以二进制格式写入的文件的指针.但是,我需要交换字节,并且我很难这样做.基本上,作为abcd写入文件的内容应该是cdab. 我的尝试: unsigned short int toWrite;
unsigned short int swapped;
for(i = 0; i < ROWS; i++) {
toWrite = &arr[i];
swapped = (toWrite >> 8) | (toWrite << 8);
fwrite(swapped, 1, sizeof(unsigned short int), source);
}
但是我得到了一个分段故障核心转储.我阅读并使用了对这个问题的upvoted答案 – convert big endian to little endian in C [without using provided func] – 但它似乎没有起作用.有什么建议?谢谢! 首先,您将值的地址换成交换,然后传递值而不是要写入的地址.它应该是: unsigned short int toWrite;
unsigned short int swapped;
for(i = 0; i < ROWS; i++){
toWrite = arr[i];
swapped = (toWrite >>8) | (toWrite <<8); // that part is OK
fwrite(&swapped, 1 , sizeof(unsigned short int) , source);
}
我很肯定编译器警告你这个.警告很有用.
本文共计434个文字,预计阅读时间需要2分钟。
我有部分工作涉及写入文件。我有一个类型为unsigned short int的数组arr,每个元素必须以二进制格式写入文件。我的初始解决方案是:
for(i=0; i 我有一个类型为unsigned short int的数组arr,每个元素必须以二进制格式写入文件. 我的初始解决方案是: for(i = 0; i < ROWS; i++) {
fwrite(&arr[i], 1, sizeof(unsigned short int), source);
}
上面的代码在将无符号短整数写入文件时起作用.此外,source是指向以二进制格式写入的文件的指针.但是,我需要交换字节,并且我很难这样做.基本上,作为abcd写入文件的内容应该是cdab. 我的尝试: unsigned short int toWrite;
unsigned short int swapped;
for(i = 0; i < ROWS; i++) {
toWrite = &arr[i];
swapped = (toWrite >> 8) | (toWrite << 8);
fwrite(swapped, 1, sizeof(unsigned short int), source);
}
但是我得到了一个分段故障核心转储.我阅读并使用了对这个问题的upvoted答案 – convert big endian to little endian in C [without using provided func] – 但它似乎没有起作用.有什么建议?谢谢! 首先,您将值的地址换成交换,然后传递值而不是要写入的地址.它应该是: unsigned short int toWrite;
unsigned short int swapped;
for(i = 0; i < ROWS; i++){
toWrite = arr[i];
swapped = (toWrite >>8) | (toWrite <<8); // that part is OK
fwrite(&swapped, 1 , sizeof(unsigned short int) , source);
}
我很肯定编译器警告你这个.警告很有用.

