ARM平台的数据转换(来自x86/x64)

use*_*643 -1 c c++ arm

我们为x86和x64平台开发了win32应用程序.我们想在ARM平台上使用相同的应用程序.对于ARM平台,字节顺序会有所不同,即ARM平台通常使用Big endian格式.所以我们想在我们的设备应用程序中处理这个问题.

例如// In x86/x64, int nIntVal = 0x12345678
在ARM中, int nIntVal = 0x78563412

如何为ARM中的以下数据类型存储值?

  1. char数组即char chBuffer [256]
  2. Int64的

请澄清一下.

此致,Raphel

Ser*_* L. 5

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:看看上面.只关心你是否必须将二进制文件存储在文件或转换指针中.