ARM 和 x86,在我的情况下是否有必要处理硬件架构兼容性?
ARM and x86, is necessary deal with Hardware Architecture compatibility in my situation?
我的网关上有一个 coap 服务器代码 运行,它可能具有 x86 或 ARM 架构,它向另一个可能具有 x86 或 ARM 架构的硬件中的 coap 客户端发送缓冲区,我的问题是,客户端是x86架构,服务端是ARM架构的特定场景,当服务端写入buffer,客户端解析payload buffer时会出现不兼容,从而报错?
obs:我问这个是因为x86架构是little-endian而ARM架构是Big-endian
CoAP 协议适用于任何字节顺序的机器。
CoAP 不会对 request/response 有效负载中传输的数据进行任何转换,但那里的通用格式与 CoAP 本身一样有明确规定。
要在可能具有不同体系结构的系统之间交换原始二进制数据,必须将数据放入已知的规范格式中。发件人必须确保它采用已知格式,而收件人必须期望它采用已知格式。
有些事情很容易。如果它只是一个 U8 值数组(无符号 8 位值),那么这已经是一种已知的规范格式。
但是,如果它是 U16、U32、U64、S16、S32、S64 值的数组或包含这些较大值的任何类型的格式,那么您必须知道它是大端字节格式还是小端字节格式。您将需要确定交换格式是什么,并确保在发送之前将数据放入该格式,并且接收方需要接受该格式的数据,也许将其转换为它想要在本地使用的格式。
因此,您不能只是盲目地将多字节数据从小端架构发送到大端架构而不进行转换。最好决定一种特定的交换格式,让数据的发送者确保数据转换为该交换格式,并确保接收者期望该交换格式的数据。
仅供参考,对于适度的数据量,这就是像 JSON 这样的非二进制格式存在并变得如此流行的原因,因为它们已经是一个众所周知的标准,没有字节序排序问题。
大多数现代 ARM CPU 都是 little-endian,与 x86 相同。 (https://en.wikipedia.org/wiki/Endianness)。某些 ARM CPU 在任一模式 (bi-endian) 下都可以 运行,但在 little-endian 模式下通常是 运行。
这与 CoAP apparently 为其协议 headers 指定的“网络字节顺序”相反,但您可以将自己的原始有效负载数据发送为 little-endian如果你愿意。
我的网关上有一个 coap 服务器代码 运行,它可能具有 x86 或 ARM 架构,它向另一个可能具有 x86 或 ARM 架构的硬件中的 coap 客户端发送缓冲区,我的问题是,客户端是x86架构,服务端是ARM架构的特定场景,当服务端写入buffer,客户端解析payload buffer时会出现不兼容,从而报错?
obs:我问这个是因为x86架构是little-endian而ARM架构是Big-endian
CoAP 协议适用于任何字节顺序的机器。
CoAP 不会对 request/response 有效负载中传输的数据进行任何转换,但那里的通用格式与 CoAP 本身一样有明确规定。
要在可能具有不同体系结构的系统之间交换原始二进制数据,必须将数据放入已知的规范格式中。发件人必须确保它采用已知格式,而收件人必须期望它采用已知格式。
有些事情很容易。如果它只是一个 U8 值数组(无符号 8 位值),那么这已经是一种已知的规范格式。
但是,如果它是 U16、U32、U64、S16、S32、S64 值的数组或包含这些较大值的任何类型的格式,那么您必须知道它是大端字节格式还是小端字节格式。您将需要确定交换格式是什么,并确保在发送之前将数据放入该格式,并且接收方需要接受该格式的数据,也许将其转换为它想要在本地使用的格式。
因此,您不能只是盲目地将多字节数据从小端架构发送到大端架构而不进行转换。最好决定一种特定的交换格式,让数据的发送者确保数据转换为该交换格式,并确保接收者期望该交换格式的数据。
仅供参考,对于适度的数据量,这就是像 JSON 这样的非二进制格式存在并变得如此流行的原因,因为它们已经是一个众所周知的标准,没有字节序排序问题。
大多数现代 ARM CPU 都是 little-endian,与 x86 相同。 (https://en.wikipedia.org/wiki/Endianness)。某些 ARM CPU 在任一模式 (bi-endian) 下都可以 运行,但在 little-endian 模式下通常是 运行。
这与 CoAP apparently 为其协议 headers 指定的“网络字节顺序”相反,但您可以将自己的原始有效负载数据发送为 little-endian如果你愿意。