我们为x86和x64平台开发了win32应用程序.我们想在ARM平台上使用相同的应用程序.对于ARM平台,字节顺序会有所不同,即ARM平台通常使用Big endian格式.所以我们想在我们的设备应用程序中处理这个问题.
例如// In x86/x64, int nIntVal = 0x12345678
在ARM中, int nIntVal = 0x78563412
如何为ARM中的以下数据类型存储值?
请澄清一下.
此致,Raphel
Endianess仅对寄存器< - >内存操作有用.
在注册表中没有任何结尾.如果你放
int nIntVal = 0x12345678
Run Code Online (Sandbox Code Playgroud)
在您的代码中,它将对任何endianess机器具有相同的效果.
所有IEEE格式(float,double)在所有体系结构中都是相同的,因此这并不重要.
在两种情况下你只需要关心结束:
a)您将整数写入必须在两种体系结构之间转换的文件.解决方案:使用hton*, ntoh*转换器系列,使用非二进制文件格式(例如XML)或标准化文件格式(例如SQLite).
b)你转换整数指针.
int a = 0x1875824715;
char b = a;
char c = *(char *)&a;
if (b == c) {
// You are working on Little endian
}
Run Code Online (Sandbox Code Playgroud)
顺便提一下,后一个代码是在运行时测试结束的一种方便方法.
数组和write, fwrite类似的如果你使用falimies的调用来转移它们你将没有问题,除非它们包含整数:然后看看上面.
int64_t:看看上面.只关心你是否必须将二进制文件存储在文件或转换指针中.