python gpib vna IEEE754 64bi

2024-07-04 07:27:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要帮助, 我将用HPBASIC编写的程序转换成python VNA网络分析器。 其数据格式为: 数据传输格式: FMB选择IEEE-754 64位数据传输格式。你知道吗

二进制数据传输消息格式:

MSB模式:字节计数字节计数字节

以下是摘录:

输出@Vna360B;“FMB MSB”!传输格式64位,最高有效字节!FMB(64位)3068(最大收集点数)。 输出@Vna360B;“of v”!输出频率值。 输入@Vna360B;P,S!返回两个整数。 输入@Vna360b;Freqs(*)!返回阵列频率。你知道吗

这是我得到的Pyvisa 我应该通过解码2.6 Ghz的值得到:

输出:['\x00\x08A\x08A\xe3\x1b@\x00\x00']

我的问题是: 这是什么格式,二进制,六进制? 如何让python解码“\x00\x08A\x08A\xe3\x1b@\x00\x00”?你知道吗

谢谢你的帮助。你知道吗


Tags: 字节格式二进制解码频率计数x1bx00
1条回答
网友
1楼 · 发布于 2024-07-04 07:27:06

格式

数据是字节列表。你可以用多种不同的方法解码字节。例如,我们可以遍历字节并将解码的字节列为整数:

for b in bytearray(b'\x00\x08A\x08A\xe3_\x1b@\x00\x00\x00'):
    print(b)

Output: 
0
8
65
8
65
227
95
27
64
0
0
0

或者我们可以将每个字节视为ASCII字符:

for b in bytearray(b'\x00\x08A\x08A\xe3_\x1b@\x00\x00\x00'):
    print(b)

Output: 


A

A
ã
_

@

请注意,这些字符中的大多数是不可见的。有些是退格字符!ASCII code table可以显示每个字节是如何被解码的。上述两种方法都分别考虑每个字节。一个字节太小,无法存储2.6 GHz的值。你知道吗

解码较大格式

structmodule用于将压缩字节数组读入python可读值,并将python值写入字节数组。Struct是一个内置包,您不必单独安装它。首先,让我们从已知值开始:2.6ghz。我们将其打包为bytearray,并查看它与从仪器接收到的值的比较:

import struct
struct.pack('<d', 2.6e9)

Output:
b'\x00\x00\x00@\x1b_\xe3A'

这看起来就像我们从仪器上读取的数组的结尾!唯一的区别是顺序是向后的。仪器必须使用“big endian”而不是“little endian”字节顺序。(要了解有关字节顺序的更多信息,请参阅struct docs。)我们可以使用>而不是<来切换字节顺序。你知道吗

import struct
struct.pack('>d', 2.6e9)

Output:
b'A\xe3_\x1b@\x00\x00\x00'

这与数组的结尾完全匹配!(在原来的示例中,粘贴结果时可能已将其中一个零切掉。)前4个字节可能有其他含义,有关详细信息,您必须查看网络分析器的手册。为了读取字节并转换为浮点值,我们将使用unpack

struct.unpack('>d', b'\x00\x08A\x08A\xe3_\x1b@\x00\x00\x00'[4:])

Output:
(2600000000.0,)

输出以元组的形式返回。由于只有足够的字节用于一个浮点值,所以元组的长度为1。你知道吗

相关问题 更多 >

    热门问题