sublime text不支持批量进制转换,需依赖插件或外部工具:①十六进制字符串转十进制用converttext插件配合正则选中后转换;②十进制转十六进制用python控制台执行hex()处理;③原始字节流转换必须通过xxd导出为文本再编辑还原。

Sublime Text 本身不支持批量十六进制与十进制互转,所有“批量转换”都依赖外部工具链或插件协同,且必须区分场景:是处理文本中的十六进制字符串(如 ff、0x1a),还是解析原始字节流(如串口日志里的 55 aa 01)。直接选中一堆数字按快捷键想转进制,会失败。
怎么批量把文本里的十六进制字符串转成十进制?
适用场景:日志/协议文本中混有可读十六进制值,比如 55 aa 01 00 或 0xff 0x1a,你想批量转成 85 170 1 0 或 255 26。
- 先用正则选中所有目标十六进制片段:打开
Find → Find...(Ctrl+F),启用. matches newline和Regex,输入\b(?:0x)?([0-9a-f]{1,2})\b(匹配单字节十六进制,含或不含0x前缀) - 点
Find All,全部高亮;再按Alt+F3(多光标)或Ctrl+D逐个扩展选中 - 打开命令面板(
Ctrl+Shift+P),输入Convert to Decimal(需已安装ConvertText插件)——注意:该命令只对纯十六进制字符串生效,0xff可转,ffh或FFh不识别 - 若含前缀
0x,建议先用Replace全局删掉:Find: 0x,Replace:(空),再执行转换
怎么把十进制数批量转成十六进制字符串?
适用场景:你有一列十进制数字(如 255、16、0),想转成 ff 或 0xFF 格式用于协议调试或代码填充。
- Sublime 原生无此功能,
Calculate插件只能计算表达式(如255输入后按Ctrl+Shift+X得255.0,不转格式) - 可靠做法:用 Python 控制台批量生成。选中所有十进制数字(每行一个),按
Ctrl+`打开控制台,粘贴并执行:
view = sublime.active_window().active_view()
for region in view.sel():
text = view.substr(region).strip()
if text:
nums = [int(x) for x in text.splitlines() if x.strip()]
hex_str = " ".join([hex(n)[2:] for n in nums]) # 小写无前缀
view.replace(edit, region, hex_str)
注意:hex(n)[2:] 去掉 0x 前缀;若需大写加前缀,改用 f"0x{n:X}"
为什么直接复制粘贴十六进制到 Sublime 再转总会出错?
常见错误现象:粘贴 55aa01 后想转十进制,结果只转了前两位 55,剩下 aa01 被忽略;或转完变成乱码。
- 根本原因:Sublime 默认按字符处理,不是按字节。
55aa01是 6 个 ASCII 字符,不是 3 个字节;真正协议数据是二进制流,必须用HexViewer查看原始字节(但它是只读的) - 编码陷阱:用 UTF-8 打开二进制日志文件,遇到
\x00或\xff会截断或显示 ,后续正则根本匹配不到 - 正确做法:先确认文件真实编码/格式。若是串口抓包日志,应设为
Encode in UTF-8(即无 BOM 的字节直通模式),而非UTF-8解码模式 - 更稳路径:用
xxd -g1 log.bin > log.hex转成文本格式,在 Sublime 里编辑后再xxd -r log.hex > log_new.bin还原
真正卡住人的地方,从来不是“有没有插件”,而是搞不清当前处理的是字符串还是字节、是文本层还是协议层。一串 ff 在文本里是两个字符,在串口数据里是一个字节——Sublime 不自动帮你切换这层语义,得你自己先定好边界。











