社区
C语言
帖子详情
求教:如何用c语言将big endian的二进制输入文件在读入时处理成little endian的?(有结构体)
ShiningIce
2006-08-24 04:53:17
由于使用的机器是little endian的,而给定的程序二进制输入集是big endian的,想在读入文件的时候将其转换为little endian的效果,要考虑有机构体的情况,请赐教。
...全文
469
12
打赏
收藏
求教:如何用c语言将big endian的二进制输入文件在读入时处理成little endian的?(有结构体)
由于使用的机器是little endian的,而给定的程序二进制输入集是big endian的,想在读入文件的时候将其转换为little endian的效果,要考虑有机构体的情况,请赐教。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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函数转换
如何提取大端存储(
Big
-
Endian
)
二进制
文件
中的数据,并输出到txt中
如何提取大端存储(
Big
-
Endian
)
二进制
文件
中的数据,并输出到txt中。matlab实现
IEEE-754 converter:从
二进制
IEEE-754 解码浮点数-开源
这个小工具解码: (1) 单精度、双精度和扩展精度浮点数从
二进制
... (2) 从
二进制
表示(
Li
ttle
和
Big
-
Endian
)到正常文本表示的 16 字节 GUID; (3) 将
Big
-
Endian
中的 Delphi TDateTime 值转换为人类可读的文本表示
ELF Binary Disector-开源
获取重要 ELF
文件
结构的转储,例如段和节信息、动态链接器要求和函数列表。 可以分析来自
Big
-
Endian
和
Li
ttle
-
Endian
机器的
二进制
文件
,例如。 可以在 i86 机器上分析 PPC
二进制
文件
二进制
读写中的大字端(
Big
Endian
)和小字端(
Li
ttle
Endian
)
Big
Endian
and
Li
ttle
Endian
python读取
二进制
的dat
文件
_python-读取大的
big
-
endian
二进制
文件
我有一个很大的
big
-
endian
二进制
文件
.我知道这个
文件
中有多少个数字.我找到了一个使用struct读取
big
-
endian
文件
的解决方案,如果
文件
很小,它可以完美地工作:data = []file = open('some_file.dat', 'rb')for i in ...
C语言
69,373
社区成员
243,079
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章