4-байтовое двоичное целое число сбрасывается выше 128 (или его кратных)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 4-байтовое двоичное целое число сбрасывается выше 128 (или его кратных)

Сообщение Anonymous »

Я прочитал двоичные данные с прибора, но результат довольно странный. У меня есть программа на Python, основанная на pyvisa, которую я описываю ниже. Странно то, что каждый раз, когда пересекается число 128 или кратное 128, данные демонстрируют странное поведение. К счастью, я могу сравнить двоичный вывод с целочисленным выводом, выдаваемым машиной. Двоичное представление кажется неправильным (см. ниже). Обратите внимание, что этот пост связан с этим постом, в котором вы увидите, как я получил эту программу для получения данных, но теперь я столкнулся с другой проблемой.
Программа

Код: Выделить всё

import pyvisa
from pyvisa.constants import StopBits, Parity
import struct

# Connect to instrument
# SR620 Universal Time Interval Counter
rm = pyvisa.ResourceManager()
TAC = rm.open_resource('ASRL4::INSTR',
baud_rate = 19200,
data_bits = 8,
stop_bits = StopBits(20),
parity    = Parity(0),
read_termination='\r\n')

# list where result is stored
meanlist = []
# retrieve histogram as binary
# 10 slices of 25 points
for j in range(0,10):
data = TAC.query_binary_values("XHST? "+str(j)+";*WAI", datatype='i',
is_big_endian=False,
data_points=25,
header_fmt = 'empty', expect_termination = True)
meanlist.extend(data)

# retrieve histogram as integer
meanlist_int = []
for j in range(1,250):
meanlist_int.append( int(float(TAC.query(f'HSPT? {j}') ) ))

Пример вывода
Затем я строю список средних значений (синяя кривая) и средний список_int (оранжевая кривая) для сравнения (используя matplotlib.pyplot.step). Горизонтальная линия равна 128. Для ясности этот график сосредоточен только на нескольких точках данных.
[img]https://i.sstatic. net/rETgojrk.png[/img]

Двоичная проверка по сравнению с целочисленным выводом
При проверке двоичного файла я заметил, что данные были выражены настолько минимально -значительный бит выражается как символ ascii, когда число меньше 128, но затем как четыре байта стиля '\x00' для более высоких значений.
Таким образом, двоичный вывод дает, например, 2 как \x02\x00\x00\x00, 112 как p\x00\x00\x00, 125 как }\x00\x00\x00, 127 как \x7f\x00\ x00\x00, но на удивление 128 как \x00\x00\x00\x00.
Это проблема машины, которая это производит, или это в как я читаю или обрабатываю данные?

Подробнее здесь: https://stackoverflow.com/questions/791 ... -multiples
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему (целое число) 1 == (целое число) 1 возвращает true, но (целое число) 200 == (целое число) 200 возвращает false? [
    Anonymous » » в форуме JAVA
    0 Ответы
    105 Просмотры
    Последнее сообщение Anonymous
  • Как преобразовать 16-битное двоичное число в целое число со знаком в Java
    Anonymous » » в форуме JAVA
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous
  • Wix записать байтовое двоичное значение для реестра
    Anonymous » » в форуме C#
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Wix записать байтовое двоичное значение для реестра
    Anonymous » » в форуме C#
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Wix записать байтовое двоичное значение для реестра
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»