Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js ARM和x86,在我的情况下有必要处理硬件架构兼容性吗?_Node.js_X86_Arm_Endianness_Coap - Fatal编程技术网

Node.js ARM和x86,在我的情况下有必要处理硬件架构兼容性吗?

Node.js ARM和x86,在我的情况下有必要处理硬件架构兼容性吗?,node.js,x86,arm,endianness,coap,Node.js,X86,Arm,Endianness,Coap,我有一个coap服务器代码在我的网关上运行,可能有x86或ARM架构,它在另一个硬件中向coap客户端发送一个缓冲区,可能有x86或ARM架构,我的问题是,在一个特定的场景中,客户端有x86架构,服务器有ARM架构,当服务器写入缓冲区并且客户端解析有效负载缓冲区时,将发生不兼容,从而导致错误 obs:我这样问是因为x86体系结构是little-endian,ARM体系结构是Big-endian。CoAP协议在任何endian机器之间工作 CoAP不会对请求/响应有效负载中传输的数据进行任何转换,

我有一个coap服务器代码在我的网关上运行,可能有x86或ARM架构,它在另一个硬件中向coap客户端发送一个缓冲区,可能有x86或ARM架构,我的问题是,在一个特定的场景中,客户端有x86架构,服务器有ARM架构,当服务器写入缓冲区并且客户端解析有效负载缓冲区时,将发生不兼容,从而导致错误


obs:我这样问是因为x86体系结构是little-endian,ARM体系结构是Big-endian。

CoAP协议在任何endian机器之间工作


CoAP不会对请求/响应有效负载中传输的数据进行任何转换,但其中的通用格式与CoAP本身一样得到了很好的指定。

要在可能不同体系结构的系统之间交换原始二进制数据,必须将数据转换为已知的规范格式。发送方必须确保它是已知格式,接收方必须期望它是已知格式

有些事情很简单。如果它只是U8值(无符号8位值)的数组,那么它已经是一种已知的规范格式

但是,如果它是由U16、U32、U64、S16、S32、S64值组成的数组,或者是包含这些较大值的任何类型的格式,那么您必须知道它是采用大端字节格式还是小端字节格式。您需要确定什么是交换格式,并确保在发送之前将数据转换为该格式,并且接收方需要接受该格式的数据,可能需要将其转换为它希望本机使用的格式

因此,您不能盲目地将多字节数据从一个小端体系结构发送到一个大端体系结构,而不进行转换。最好确定一种特定的交换格式,让数据的发送者确保数据已转换为该交换格式,并确保接收者希望数据采用该交换格式


仅供参考,对于少量的数据,这就是为什么像JSON这样的非二进制格式存在并变得如此流行的原因,因为它们已经是一个众所周知的标准,不存在尾端排序问题。

大多数现代ARM CPU都是小尾端,与x86相同。()。一些ARM CPU可以在任一模式(双端)下运行,但通常在小端模式下运行


这与CoAP为其协议头指定的“网络字节顺序”相反,但如果您愿意的话,您可以将自己的原始有效负载数据以小尾端的形式发送出去。

好的,CoAP协议指定您以网络字节顺序发送协议本身中的内容。它没有指定关于数据有效负载的任何内容。这取决于发送者,我认为OP在这个问题上要问的是什么。很好的一点——我不能否决我自己的答案,但支持你的答案,我确实错过了关于有效负载缓冲区的要点。@jfriend00是关于我的问题的,我唯一关心的是不同的arquictetures如何处理有效负载。arm天生就是小endian。你必须投入额外的工作才能把它做大