luatos 字符串与数组转换,解析hex数组

简介: luatos 字符串与数组转换,解析hex数组

luatos里使用字符串来存储hex序列,解析数据时,需要转换为hex数组,写了一个转换方法

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] 虚拟机已停止运行
目录
相关文章
|
存储 机器学习/深度学习 缓存
🚀 力扣热题 394:字符串解码(详细解析)(Go语言版)
文章提供了两种解法:栈结构和递归解法。栈解法通过维护数字栈与字符串栈,依次处理 `[` 和 `]`,构造解码结果;递归解法则利用函数调用逐层解析嵌套结构。两者时间复杂度均为 $O(n)$,空间复杂度也为 $O(n)$。栈解法直观易懂,适合初学者;递归解法优雅简洁,适合处理深度嵌套规则。掌握这两种方法,可灵活应对类似问题,提升解题能力。
629 11
|
存储 监控 算法
关于员工上网监控系统中 PHP 关联数组算法的学术解析
在当代企业管理中,员工上网监控系统是维护信息安全和提升工作效率的关键工具。PHP 中的关联数组凭借其灵活的键值对存储方式,在记录员工网络活动、管理访问规则及分析上网行为等方面发挥重要作用。通过关联数组,系统能高效记录每位员工的上网历史,设定网站访问权限,并统计不同类型的网站访问频率,帮助企业洞察员工上网模式,发现潜在问题并采取相应管理措施,从而保障信息安全和提高工作效率。
319 7
|
人工智能 前端开发 JavaScript
拿下奇怪的前端报错(一):报错信息是一个看不懂的数字数组Buffer(475) [Uint8Array],让AI大模型帮忙解析
本文介绍了前端开发中遇到的奇怪报错问题,特别是当错误信息不明确时的处理方法。作者分享了自己通过还原代码、试错等方式解决问题的经验,并以一个Vue3+TypeScript项目的构建失败为例,详细解析了如何从错误信息中定位问题,最终通过解读错误信息中的ASCII码找到了具体的错误文件。文章强调了基础知识的重要性,并鼓励读者遇到类似问题时不要慌张,耐心分析。
973 5
|
自然语言处理 算法 搜索推荐
字符串相似度算法完全指南:编辑、令牌与序列三类算法的全面解析与深入分析
在自然语言处理领域,人们经常需要比较字符串,这些字符串可能是单词、句子、段落甚至是整个文档。如何快速判断两个单词或句子是否相似,或者相似度是好还是差。这类似于我们使用手机打错一个词,但手机会建议正确的词来修正它,那么这种如何判断字符串相似度呢?本文将详细介绍这个问题。
1492 1
|
存储 关系型数据库 MySQL
|
SQL 开发框架 前端开发
在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
|
存储 JavaScript 前端开发
一文带你深度解析:JavaScript中对象与数组的威力究竟有多大?
一文带你深度解析:JavaScript中对象与数组的威力究竟有多大?
|
存储 算法 搜索推荐
深入解析String数组的操作与性能优化策略
深入解析String数组的操作与性能优化策略
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
1045 140
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析

热门文章

最新文章

推荐镜像

更多
  • DNS