gpt4 book ai didi

php - 串行读取十六进制数据时 PHP 中的奇怪输出

转载 作者:太空狗 更新时间:2023-10-29 12:20:10 24 4
gpt4 key购买 nike

当我读取 PHP 中的十六进制字符时,我得到了这个奇怪的输出, 其中 PHP 从 Arduino 串行获取数据..

这是输出..

ÿ ÿ^A ÿ^A

我编写了一个用户空间应用程序,用于将数据发送到 Arduino。

这是我的用户空间应用程序的示例代码:

unsigned char data[2][7] = {{0x01,0x01,0xFF,0x3F,0x00,0x3F,0x08},
{0xFF,0x01,0x02,0xFF,0x00,0x2F,0x10}};

fd=open("/dev/ttyS0",O_RDWR | O_NOCTTY);
if(fd<0)
exit(1);

if (strcmp(argv[1], "go up")==0) {
write(fd,data[0],8); // What I used to send data to my Arduino..
}

这是我用来从 Arduino 获取数据的示例 PHP 代码:

$sCon = $sConnect->SerialConnect("/dev/ttyS0", 9600);
shell_execute("test 'go up'"); //Test is the name of my user space application
usleep(100000)
$data .= fread($sCon, 25); // Get the data from the Arduino..
$sConnect->SerialClose($sCon);

现在当我运行它时,页面上显示的数据是乱七八糟的:ÿ ÿ^A ÿ^A。我需要检索此数据:0x01,0x01,0xFF,0x3F,0x00,0x3F,0x08,这些数据将显示在我的网站上..

当我改变这个

write(fd,data[0],8);  // Prints `ÿ ÿ^A ÿ^A`

对此

write(fd,"010101FF3F003F08",15);  // Prints 010101FF3F003F08 in PHP

然后我可以毫无问题地检索数据...

为什么显示为 ÿ ÿ^A ÿ^A

最佳答案

当您执行 write(fd, data[0], 8) 时,您正在发送二进制数据流,即编码为 0x01 的字符,0x01 等,不是 ASCII表示您的数据。

根据您的目标,您应该将它们作为 ASCII 字符串发送。要在 PHP 中处理它们,这是最简单的方法(但它会损失一半的带宽,每传输 8 位有 4 个有用位)。

for(int p=0; p<8; p++) { 
fprintf(fd, "%02x", data[0][p]);
}

代替

write(fd, data[0], 8);

关于php - 串行读取十六进制数据时 PHP 中的奇怪输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12097702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com