如何实现HEX函数从右往左读取,将倒序存储的HEX值转换为DEC数值
解决方案
这个问题本质是小端序(Little-endian) 字节存储规则导致的HEX字符串倒序,属于多字节数值跨系统存储的典型字节序问题,以下是不同场景的可落地实现方案:
通用处理逻辑(全语言通用)
- 从数据库取出完整HEX字符串后,先截取对应数值长度的有效位,你当前场景的数值占2字节,有效位是前4位
8813,后续的0是填充位可直接截断 - 将有效HEX字符串按每2个字符为1个字节分组,得到
['88', '13'] - 反转分组后的数组,得到
['13', '88'] - 把反转后的数组合并为新的HEX字符串
1388,再转换为十进制即可得到正确数值5000
各场景代码示例
网页前端JavaScript直接处理
// 入参为从接口拿到的数据库存储HEX字符串 const dbHexStr = '881300000000000'; // 按数值实际占用字节数截取有效位,2字节对应4位HEX const validHex = dbHexStr.slice(0, 4); // 按2字符分组、反转、合并得到正确顺序的HEX const correctHex = validHex.match(/.{1,2}/g).reverse().join(''); // 转十进制数值 const decResult = parseInt(correctHex, 16); console.log(decResult); // 输出 5000
后端Python处理
db_hex_str = '881300000000000' valid_hex = db_hex_str[:4] # 分组反转合并逻辑 correct_hex = ''.join([valid_hex[i:i+2] for i in range(0, len(valid_hex), 2)][::-1]) dec_result = int(correct_hex, 16) print(dec_result) # 输出 5000
MySQL查询时直接转换(无需业务层处理)
-- 假设HEX存储字段为hex_col,对应表为your_table SELECT CAST(CONV( CONCAT( SUBSTRING(hex_col, 3, 2), SUBSTRING(hex_col, 1, 2) ), 16, 10 ) AS UNSIGNED) AS dec_result FROM your_table;
扩展说明
如果后续需要处理更长的数值(比如4字节对应8位HEX),仅需要调整有效位截取长度,分组反转的核心逻辑完全通用,提前确认业务数值的字节长度即可避免截断错误。
内容的提问来源于stack exchange,提问作者BlackHeart1408
相关产品推荐
相关产品推荐

