加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 交换无符号短整数的字节

发布时间:2020-12-16 09:20:24 所属栏目:百科 来源:网络整理
导读:我有一个部分工作的功能,涉及写入文件. 我有一个类型为unsigned short int的数组arr,每个元素必须以二进制格式写入文件. 我的初始解决方案是: for(i = 0; i ROWS; i++) { fwrite(arr[i],1,sizeof(unsigned short int),source);} 上面的代码在将无符号短整数
我有一个部分工作的功能,涉及写入文件.

我有一个类型为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,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,source);  
}

我很肯定编译器警告你这个.警告很有用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读