You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Protobuf文本编码的bytes字段转换为stdout的原始二进制?

将Protobuf文本格式的Bytes字符串转换为原始二进制输出到标准输出

下面提供几种实用的实现方式,直接输出原始二进制到stdout:

方法一:Python 脚本处理

Python 原生支持解析这类带八进制转义的字符串,直接转成二进制输出即可:

import sys

# 注意先去掉输入字符串首尾的双引号
text_str = '\n$e6b7(\215\363\267\230\020\022\rL\032\rMSE\"\rL20\001:\017@\300\213\307\370\2662H\001P\002h\006Z\234\001foobar\n\n/u/p\310\006\232\001\005'

# 用latin-1编码保证每个字符按字节映射,直接输出二进制
sys.stdout.buffer.write(text_str.encode('latin-1'))

运行脚本后,stdout 就会输出对应的原始二进制数据。

方法二:Go 语言实现

Go 的strconv.Unquote方法可以完美解析符合Protobuf文本规范的转义字符串:

package main

import (
	"os"
	"strconv"
)

func main() {
	// 保留原始带双引号的输入字符串
	input := "\"\\n$e6b7(\\215\\363\\267\\230\\020\\022\\rL\\032\\rMSE\\\"\\rL20\\001:\\017@\\300\\213\\307\\370\\2662H\\001P\\002h\\006Z\\234\\001foobar\\n\\n/u/p\\310\\006\\232\\001\\005\""
	data, err := strconv.Unquote(input)
	if err != nil {
		os.Stderr.WriteString("解析失败: " + err.Error() + "\n")
		os.Exit(1)
	}
	os.Stdout.Write([]byte(data))
}

编译运行后,二进制数据会直接输出到标准输出。

方法三:Linux/macOS 命令行直接处理

利用 bash 的字符串解析特性,一行命令就能搞定:

TEXT_BYTES=$'\n$e6b7(\215\363\267\230\020\022\rL\032\rMSE\"\rL20\001:\017@\300\213\307\370\2662H\001P\002h\006Z\234\001foobar\n\n/u/p\310\006\232\001\005'
echo -n "$TEXT_BYTES"

$''语法会自动解析八进制转义,echo -n避免额外添加换行符,直接输出原始字节流。

内容的提问来源于stack exchange,提问作者merlin2011

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 23:44:50