Luatos の文字列と配列の変換、16 進配列の解析

Luatos は 16 進シーケンスを格納するために文字列を使用します. データを解析するときは、16 進配列に変換する必要があり、変換メソッドが記述されています.

s = "1234567891234567" --测试字符串
print(string.len(s))


--将字符串转换为hex数组,初学,转换可能有点麻烦^_^
function toHexArray( data )
    local array={
    
    }
    local index=1
    for i=1,data:len()/2 do
        array[index] =  (data :byte((i-1)*2+1)-0x30) * 16 + data :byte(i*2)-0x30; 
        print(i, data :byte((i-1)*2+1), data :byte(i*2))
        index = index+1;
    end

    return array
end

function get_u16( hexarray, b,e)

    local val  = hexarray[b] * 0x100 + hexarray[e] 

    return val;
end

function get_f16( hexarray, b,e, rato)

    local val  = hexarray[b] * 0x100 + hexarray[e] 

    return val / rato;
end

--测试代码
local bytes={
    
    }
bytes = toHexArray(s)
local val
for i=1,8 do
    val = bytes[i]
    print(i, bytes[i])
    print(string.format("%d: 0x%x",i, val))
end

--解析无符号short
val = get_u16(bytes, 1,2)
print(string.format("1: 0x%x %d", val,val))

--解析无符号short
val = get_u16(bytes, 3,4)
print(string.format("2: 0x%x %d", val,val))

--解析为浮点数,保留1位小数
val = get_f16(bytes, 5,6, 10)
print(string.format("3: %.1f %d", val,get_u16(bytes, 5,6)))

luatos のオンライン テスト環境を使用できます:
https://wiki.luatos.com/_static/luatos-emulator/lua.html
実行結果:

[23:33:54] 虚拟机初始化完毕
[23:33:54] 16
[23:33:54] 1	49	50
[23:33:54] 2	51	52
[23:33:54] 3	53	54
[23:33:54] 4	55	56
[23:33:54] 5	57	49
[23:33:54] 6	50	51
[23:33:54] 7	52	53
[23:33:54] 8	54	55
[23:33:54] 1	18
[23:33:54] 1: 0x12
[23:33:54] 2	52
[23:33:54] 2: 0x34
[23:33:54] 3	86
[23:33:54] 3: 0x56
[23:33:54] 4	120
[23:33:54] 4: 0x78
[23:33:54] 5	145
[23:33:54] 5: 0x91
[23:33:54] 6	35
[23:33:54] 6: 0x23
[23:33:54] 7	69
[23:33:54] 7: 0x45
[23:33:54] 8	103
[23:33:54] 8: 0x67
[23:33:54] 1: 0x1234 4660
[23:33:54] 2: 0x5678 22136
[23:33:54] 3: 3715.5 37155
[23:33:54] 虚拟机已停止运行

おすすめ

転載: blog.csdn.net/wuquan_1230/article/details/126551906