如何将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
相关产品推荐
相关产品推荐

