добавить Hex к таблице байтов в lua - PullRequest
0 голосов
/ 03 февраля 2011

у меня есть следующий шестнадцатеричный C0010203 мне нужно сохранить его в байтах в таблице байтов

я забыл синтаксис, который помню

bytes={}
bytes={0xC0 , something here}
 or 
bytes = {something here, 0xC0}

спасибо за помощь

Ответы [ 3 ]

1 голос
/ 03 февраля 2011

Мой бросок на это будет:

s="C001020304"
t={}
for k in s:gmatch"(%x%x)" do
    table.insert(t,tonumber(k,16))
end
0 голосов
/ 05 февраля 2011

В Lua нет "таблицы байтов".Однако есть таблица с байтами в виде чисел.

bytes={0xC0, 0x01, 0x02, 0x03}

И вот еще несколько вариантов:

--A table with the bytes as numbers in little-endian:
bytes={0x03, 0x02, 0x01, 0xC0}

--A string of characters that contain the bytes:
bytes=string.char(0xC0, 0x01, 0x02, 0x03)

--A string of characters that contain the bytes in little-endian:
bytes=string.char(0x03, 0x02, 0x01, 0xC0)

--A table of single character strings for each byte:
bytes={string.char(0xC0),string.char(0x01),string.char(0x02),string.char(0x02)}

--A table of single character strings for each byte in little-endian:
bytes={string.char(0x03),string.char(0x02),string.char(0x01),string.char(0xC0)}
0 голосов
/ 03 февраля 2011

Мне немного непонятно, что вы имеете в виду, что-то вроде этого?

tomte@tomte ~ $ lua
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> bytes={}
> bytes["something here"]=0xC0
> print(bytes["something here"])
192
>

EDIT: Я вижу, возможно, грубое, но рабочее решение (без проверки границ, вы должны настроить код для строк, которые не имеют четной длины или не содержат шестнадцатеричные числа);

tomte@tomte ~ $ lua
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> i=1
> j=1
> t={}
> s="C0010203"
> while true do
>> t[j] = 0 + ("0x" .. string.sub(s,i,i+1))
>> j=j+1
>> i=i+2
>> if(i>string.len(s)) then break end
>> end
> print (t[1])
192
> print (t[2])
1
> print (t[3])
2
> print (t[4])
3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...