Odczytuje sobie dane z rejestrów modbus za pomocą biblioteki libmodbus w ramach oprogramowania, które od dwóch lat rozwijam, i które działa produkcyjnie od ponad roku, aż przyszedł update firmware urządzenia, na którym to funkcjonuje i pojawił się problem. W dużym skrócie, zapisana wartość równa 1 zostaje odczytana jako 256 w nowej wersji.
Tak to wygląda:
uint16_t reg_int_temp;
modbus_read_registers(mb, reg_num, 1, ®_int_temp)
printf("Integer value: %x\n", reg_int_temp);
dostaję taki wynik dla wartości 1:
<00><01><00><00><00><05><01><03><02><00><01>
Integer value: 100
albo taki dla wartości 27:
<00><01><00><00><00><05><01><03><02><00><1B>
Integer value: 1b00
Najwyraźniej endiany się przestawiły w tej wersji, ale pytanie, co ja mógłbym z tym teraz uczynić?
abrakadaberpython -c 'print(int("0x1b",16))'
, a w kalkulatorze jak to zrobisz?