社区
C语言
帖子详情
求教:如何用c语言将big endian的二进制输入文件在读入时处理成little endian的?(有结构体)
ShiningIce
2006-08-24 04:53:17
由于使用的机器是little endian的,而给定的程序二进制输入集是big endian的,想在读入文件的时候将其转换为little endian的效果,要考虑有机构体的情况,请赐教。
...全文
487
12
打赏
收藏
求教:如何用c语言将big endian的二进制输入文件在读入时处理成little endian的?(有结构体)
由于使用的机器是little endian的,而给定的程序二进制输入集是big endian的,想在读入文件的时候将其转换为little endian的效果,要考虑有机构体的情况,请赐教。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Jim_King_2000
2006-08-25
打赏
举报
回复
#include <windows.h>
inline void swap(BYTE *pby1, BYTE *pby2)
{
BYTE byTemp = *pby1;
*pby1 = *pby2;
*pby2 = byTemp;
}
int x = 0x12345678;
BYTE *pByte = static_cast<BYTE *>(&x);
swap(pByte, pByte + 3);
swap(pByte + 1, pByte + 2);
ShiningIce
2006-08-25
打赏
举报
回复
谢谢大家的热心,忘记先说我测试的平台是amd64位双核的机子
我先自己试试,遇到问题再来请教大家
fmddlmyy
2006-08-25
打赏
举报
回复
没有很好的办法。必须根据原始数据,确定每个需要调换的word和dword的偏移(可以弄一张表),然后逐一调换。
或者数据源主动将数据写成小尾。
如果是标准的C结构,可以用perl脚本直接从源文件读出偏移信息。
大耳
2006-08-24
打赏
举报
回复
#ifndef swap32
#define swap32(x) ((((x)&0xFF)<<24) \
|(((x)>>24)&0xFF) \
|(((x)&0x0000FF00)<<8) \
|(((x)&0x00FF0000)>>8) )
#endif
其实是自己做字节调换,
saoyu
2006-08-24
打赏
举报
回复
写错了,不好意思
htonl,htons同理可得,本地字节顺序向网络字节顺序,就是本地字节顺序-->big endian
saoyu
2006-08-24
打赏
举报
回复
ntohl ntohs是网络字节顺序向本地字节顺序转化(就是big endian向本地字节顺序),如果是intel的big endian-->little endian,如1234转成3412,单个字节内每一位顺序不变。如果是powerpc体系结构则是big endian-->big endian,即不作任何变化。
htonl,htons同理可得,本地字节顺序向网络字节顺序,就是little endian-->本地字节顺序
jixingzhong
2006-08-24
打赏
举报
回复
那写一个转换函数吧 ...
不过可能很麻烦 ...
yingge
2006-08-24
打赏
举报
回复
仿佛搞反了,应该是
ntohl转换双字,如传过来的是1234,转换之后就是4321
ntohs转换字,如传过来的是12,转换之后就是21
抱歉.
yingge
2006-08-24
打赏
举报
回复
网络字节顺序就是big endian的,这两个函数用在Intel机器上就可以将字或者双字转换成little endian
htonl转换双字,如传过来的是1234,转换之后就是4321
htons转换字,如传过来的是12,转换之后就是21
不要管什么结构体,只要你知道下一个读出来的是字还是双字就足够了。
ShiningIce
2006-08-24
打赏
举报
回复
这个仿佛是网络专用的吧
htons()和htonl()用来将主机字节次序转成网络字节次序,前者应用于16位无符号数,后者应用于32位无符号数
能否说详细些,谢谢
yingge
2006-08-24
打赏
举报
回复
用ntohl或者ntohs函数转换
【深度学习平台】AutoDL显卡租用进阶技巧:
文件
传输与代码编辑优化方案
内容概要:本文介绍了在使用AutoDL显卡租用平台
时
的进阶技巧,重点涵盖
文件
传输与代码编辑的高效方法。
文件
传输部分详细讲解了本地与平台间的两种方式:通过FileZilla软件使用SFTP协议进行可视化传输,以及通过网页端直接上传下载
文件
,并对比了各自的适用场景;同
时
还介绍了平台内部多实例之间的
文件
中转传输方法,利用挂载目录实现同区域实例间高效共享
文件
,提升工作效率。在代码编辑方面,文章分析了传统终端编辑和本地上传覆盖的局限性,并推荐使用JupyterLab网页界面进行在线代码编辑,操作简便且支持实
时
保存,适合频繁修改的开发场景。 适合人群:使用AutoDL平台进行深度学习开发的研究人员或爱好者,尤其是有一定平台使用经验、希望提升效率的用户;适合需要频繁传输
文件
或多实例协同工作的开发者。 使用场景及目标:①在本地与实例间选择合适的
文件
传输方式以提高效率;②实现多个实例间的快速
文件
共享,减少重复上传;③优化代码编写流程,避免反复上传
文件
,提升开发便捷性与流畅度。
个人网-个人事务管理系统(已停止维护)
【源码预览】:https://renmaiwang.cn/s/8z6ns (最新版、最全版本)个人网-个人事务管理系统(已停止维护)
vpclattice-jvm-1.4.11.jar
vpclattice-jvm-1.4.11.jar
bananas.zip
Bananas Screen Sharing 是一款基于 WebRTC 技术的开源屏幕共享工具,专注于跨平台支持(Windows、macOS 和
Li
nux)和极简的用户体验。
Kite 前台页面是vue ssr服务端渲染、后台页面是react spa、服务层nodejs express、mysql编写的一套多权限文章、动态管理系统
【源码预览】:https://renmaiwang.cn/s/4ubzg (最新版、最全版本) Kite 前台页面是vue ssr服务端渲染、后台页面是react spa、服务层nodejs express、mysql编写的一套多权限文章、动态管理系统
C语言
70,026
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章