社区
C语言
帖子详情
求教:如何用c语言将big endian的二进制输入文件在读入时处理成little endian的?(有结构体)
ShiningIce
2006-08-24 04:53:17
由于使用的机器是little endian的,而给定的程序二进制输入集是big endian的,想在读入文件的时候将其转换为little endian的效果,要考虑有机构体的情况,请赐教。
...全文
477
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函数转换
如何提取大端存储(
Big
-
Endian
)
二进制
文件
中的数据,并输出到txt中
如何提取大端存储(
Big
-
Endian
)
二进制
文件
中的数据,并输出到txt中。matlab实现
利用Java读取
二进制
文件
实例详解
在示例代码中,我们使用了
li
ttle
-
endian
字节顺序来读取
二进制
文件
,并将其转换为CSV
文件
。 四、Java读取
二进制
文件
的优点 使用Java读取
二进制
文件
具有许多优点。首先,Java提供了多种方式来读取和
处理
二进制
文件
,...
C#读取
二进制
文件
方法分析
在
处理
二进制
文件
时
,有两点需要注意: 1. **数据对齐**:如同C和C++,C#编译器也会根据平台和编译设置对数据结构进行对齐。这意味着在内存中,
结构体
的
成
员可能会被移动到特定的地址,以优化
处理
器的性能。在跨...
struct-to-hexstring-converter:用C ++工具将结构转换为十六进制格式的字符串并返回
在C++编程中,将
结构体
(struct)转换为十六进制格式的字符串是一个常见的需求,特别是在
处理
二进制
数据、网络通信或者日志记录
时
。这个“struct-to-hexstring-converter”项目提供了一个解决方案,它允许我们将...
ELF Binary Disector-开源
获取重要 ELF
文件
结构的转储,例如段和节信息、动态链接器要求和函数列表。 可以分析来自
Big
-
Endian
和
Li
ttle
-
Endian
机器的
二进制
文件
,例如。 可以在 i86 机器上分析 PPC
二进制
文件
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章