进制转换

简介: 进制转换

场景与需求

由于我们的 Lua 一般使用在嵌入式场景,很多时候会遇到十六进制二进制的数据处理。虽然 Lua 自带的字符串功能十分强大,但是处理十六进制的时候还是需要我们做一些工作的,本笔记记录下来这些常用的处理方法。


普通字符串十六进制显示

--- 字符串转为十六进制显示
--- @param str string 原始字符串
--- @param separator string | nil 分隔符
--- @return string 十六进制显示字符串
function string.toHex(str, separator)
    if (type(str) ~= "string") then error("string.toHex invalid params type") end
    local buffer = {}
    for index = 1, str:len() do
        table.insert(buffer, string.format("%02X", str:sub(index):byte()))
    end
    return table.concat(buffer, separator or "")
end点击复制复制失败已复制


用法:

local str = "123f你好ds"
print(string.toHex("hello world"))  --> 68656C6C6F20776F726C64
print(string.toHex("str"))          --> 737472
print(string.toHex("str", ' '))     --> 73 74 72
print(str:toHex())                  --> 31323366E4BDA0E5A5BD6473
print(str:toHex('-'))               --> 31-32-33-66-E4-BD-A0-E5-A5-BD-64-73点击复制复制失败已复制


十六进制字符串转标准字符串

提示

Lua 中,由于默认就是 UTF-8 格式的编码,因此这里省去了我们好多麻烦。

--- 十六进制显示字符串转标准字符串
--- @param hex string 十六进制显示的字符串
--- @return string 标准字符串
function string.fromHex(hex)
    if (type(hex) ~= "string") then error("string.fromHex invalid params type") end
    -- 滤掉分隔符
    hex = hex:gsub("[%s%p]", ""):upper()
    -- 检查内容是否合法
    if (hex:find("[^0-9A-Fa-f]") ~= nil) then error("string.fromHex invalid params content") end
    -- 检查字符串长度
    if (hex:len() % 2 ~= 0) then error("string.fromHex invalid params length") end
    -- 拼接字符串
    local buffer = {}
    for index = 1, hex:len(), 2 do
        table.insert(buffer, string.char(tonumber(hex:sub(index, index + 1), 16)))
    end
    return table.concat(buffer)
end点击复制复制失败已复制


用法:

local str = "123f你好ds"
print(string.fromHex("31:32"))        --> 12
print(string.fromHex(str.toHex()))    --> 123f你好ds
print(string.fromHex(str.toHex("-"))) --> 123f你好ds
目录
相关文章
|
自然语言处理 Go 持续交付
阿里云云效产品使用合集之如何安装agent
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
11月前
|
Java 编译器 程序员
Lambda表达式的使用、简写与原理深入理解
Lambda表达式的使用、简写与原理深入理解
178 1
|
11月前
|
存储 应用服务中间件 nginx
Docker教程
Docker教程
|
监控 前端开发 开发工具
ARMS前端监控
【8月更文挑战第25天】
375 1
|
12月前
|
存储 数据采集 人工智能
外滩大会热议:AI时代数据价值转变,如何打造下一代智能数据体系?
9月5日,2024 Inclusion·外滩大会举办“从DATA for AI到AI for DATA”论坛,蚂蚁集团、上海交通大学和复旦大学联合主办,探讨AI时代数据价值的转变。中国工程院院士郑纬民和新加坡工程院院士颜水成等专家参会,分享了数据技术变化趋势及与AI融合的最新进展。论坛强调大模型对数据技术的需求推动了存储、生产和加工等各环节的技术革新,并探讨了合成数据和智能数据体系的重要性。
|
人工智能 异构计算 Python
百度飞桨(PaddlePaddle)安装
百度飞桨(PaddlePaddle)安装
381 0
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的天气预报管理系统附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的天气预报管理系统附带文章和源代码部署视频讲解等
191 3
|
前端开发 JavaScript
HTML+CSS+JS 倒计时动画效果
HTML+CSS+JS 倒计时动画效果
代码重构:优化之道
代码重构:优化之道
|
存储 数据可视化 数据管理
Google Earth Engine谷歌地球引擎GEE外部栅格矢量数据导入管理与下载及数据与代码共享
Google Earth Engine谷歌地球引擎GEE外部栅格矢量数据导入管理与下载及数据与代码共享
360 1