Преобразование двух 8-битных значений в 16-битное целое число без знака и обратно в lua - PullRequest
0 голосов
/ 29 апреля 2020

У меня проблемы с преобразованием в 16-битные значения int из необработанных данных, которые я получаю по Ethe rnet.

Например, я могу получить это: \ x00 \ x0A \ x00 \ x00 \ x00 \ x09 \ x01 \ x10 \ x00 \ x01 \ x00 \ x10 \ x02 \ x00 \ x00

Мне нужно взять два из этих необработанных байтов данных и преобразовать их в 16-разрядное значение без знака. До сих пор я пытался с tonumber (), но я не могу найти способ объединить 2 байта, я видел несколько примеров использования string.gsub () для преобразования, но все они имеют дело с ASCII-представление необработанных данных.

TIA

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Если вы используете Lua 5.3 или новее, попробуйте также string.unpack. Вы можете выбрать порядок байтов с помощью < и >:

s="\x00\x0A\x00\x00\x00\x09\x01\x10\x00\x01\x00\x10\x02\x00\x00\x00"
print("<",">")
for i=1,#s,2 do
    print((string.unpack("<i2",s,i)),(string.unpack(">i2",s,i)))
end
1 голос
/ 30 апреля 2020

Используйте string.byte() для одного символа, чтобы превратить его в числовое значение, затем просто умножьте более значимое на 256 (или, если вы используете Lua 5.3 или новее, сдвиньте его влево на 8 бит), затем добавьте их.

...