Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.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
如何将嵌入式设备中的C结构传输到PHP_Php_C_Embedded_Tcp Ip_Microchip - Fatal编程技术网

如何将嵌入式设备中的C结构传输到PHP

如何将嵌入式设备中的C结构传输到PHP,php,c,embedded,tcp-ip,microchip,Php,C,Embedded,Tcp Ip,Microchip,我在一个嵌入式设备中有一个相当大(大约50字节)的结构,它将被传输到一个PHP脚本,该脚本将被存储在数据库中。结构中的大多数元素是位,有些是整数和字符。 我计划使用C(嵌入式设备)中的union将数据作为二进制数组,并通过URL字符串作为变量进行base64编码和上载。 现在在php中,我有一个大数组,它需要作为标志和整数分开存储在DB中。 这是我的任务。这将是做这项工作的合适方法。 谢谢如果您以二进制方式发送,那么无论平台字节顺序如何,您都必须在每一端决定并强制执行字节顺序。使用函数强制执行网

我在一个嵌入式设备中有一个相当大(大约50字节)的结构,它将被传输到一个PHP脚本,该脚本将被存储在数据库中。结构中的大多数元素是位,有些是整数和字符。 我计划使用C(嵌入式设备)中的union将数据作为二进制数组,并通过URL字符串作为变量进行base64编码和上载。 现在在php中,我有一个大数组,它需要作为标志和整数分开存储在DB中。 这是我的任务。这将是做这项工作的合适方法。
谢谢

如果您以二进制方式发送,那么无论平台字节顺序如何,您都必须在每一端决定并强制执行字节顺序。使用函数强制执行网络字节顺序

此外,您不能依赖编译器生成的结构位字段在两种平台上进行相同的打包和解包,因此对于位字段,您必须使用移位和屏蔽进行打包和解包,并小心跨越字节或字边界的位字段


一个更容易移植的解决方案可能是使用结构化文本格式(如XML或JSON)进行传输,或者使用您自己设计的专有格式(如果这些格式过于详细)。

使用C创建的结构可以使用函数在php中解码。

为什么不在C中生成JSON并在php中解析?JSON和XML也包含标记信息?我需要一个小的有效载荷。你为什么需要一个小的有效载荷?您可以在不使用太多内存的情况下逐步写入有效负载。或者您可以简单地在有效负载上写入二进制文件,然后在PHP端解析它。目前传输套接字缓冲区的大小很小。也许可以增加它。我会努力的。否则我必须以两到三个数据块的形式发送数据。或者我想我必须在php端进行手动解析。但是在这种情况下,由于有效载荷变量可能在将来被修改,我们必须计算位并进行更改。这就是为什么我想知道php中是否有任何方法可以使这项任务变得更容易。具有有限套接字的嵌入式设备可能是非易用的-POSIX@MarcovandeVoort:也许吧,但字节顺序函数通常在任何情况下都会实现,否则实现起来就很简单了。我不认为他需要移位和解掩码,因为如果他使用某个编译器为某个平台创建嵌入式应用程序,那么位字段的顺序和结构打包将永远不会改变。@vik:问题不在于使用同一个编译器在同一个系统上进行位打包,而在于使用运行PHP脚本的连接系统对数据进行解释的嵌入式系统。此外,代码可能比最初在其上实现的系统寿命更长,并且可以在其他地方重用。