在Perl中将字节从设备转换为十进制

7d7tgy0s  于 2023-01-02  发布在  Perl
关注(0)|答案(1)|浏览(171)

我正在尝试按照这个教程:https://cylab.be/blog/92/measure-ambient-temperature-with-temper-and-linux来获取TEMPer USB传感器来测量环境温度,这样我就可以将其合并到一个Perl脚本中,以提醒我房间的环境温度。在教程的示例中,它们转换来自设备的以下字节的数据:

Response from device (8 bytes):
     80 80 0b 92   4e 20 00 00

致:

In the response, the Bytes 3 and 4 (so 0b 92) indicate the ambient temperature:

0b 92 converted into decimal is 2932
2932 divided by 100 is 29.32 C

有人知道如何使用Perl将这样的数据字节转换为十进制,从而转换为摄氏温度吗?

mnemlml8

mnemlml81#

Perl的hex函数可以将文本中的十六进制数字转换为Perl数字,然后可以用任何方式表示这些数字:

my $string = '0b92';
my $number = hex($string);
print $number;  # 2962

但是,听起来你可能是在从设备阅读原始数据,并且你想要的数字是两个八位字节,读取这些数据并使用unpack(使用符合八位字节顺序的适当格式)将其转换为Perl数字:

my $buffer;
read $fh, $buffer, 2;
my $number = unpack 'S>', $buffer;

相关问题