protoc
protoc- 安装:(PC端安装)二进制文件
protoc- Mac
- 安装
brew install protobuf - 升级
brew upgrade protobuf
- 安装
- Mac
- 安装:(PC端安装)二进制文件
解码
核心代码:
################################################################################
# protoc
################################################################################
decodedJsonStr = decodeProtobuf_bytes(protobufBytes)
print("decodedJsonStr=%s" % decodedJsonStr)
# decodedJsonStr = decodeProtobuf_hexStr(protobufBytesHexStr_noSpace)
# print("decodedJsonStr=%s" % decodedJsonStr)
saveTextToFile(parseResultFile_protoc, decodedJsonStr)
相关工具类
详见:
- https://github.com/crifan/crifanLibPython/blob/master/python3/crifanLib/thirdParty/crifanProtobuf.py
decodeProtobuf_bytes
import os
import codecs
import bytes
import tempfile
def loadTextFromFile(filePath, fileEncoding="utf-8"):
"""load file text content from file"""
with codecs.open(filePath, 'r', encoding=fileEncoding) as fp:
allText = fp.read()
# logging.debug("Complete load text from %s", fullFilename)
return allText
def decodeProtobuf_bytes(protobufBytes):
"""
Decode protobuf bytes to json string
"""
protoInputFile = tempfile.NamedTemporaryFile()
protoInputFileName = protoInputFile.name
protoOutputFile = tempfile.NamedTemporaryFile(mode="w", encoding="utf-8")
protoOutputFileName = protoOutputFile.name
# saveBytesToFile(protobufBytes, protoInputFile)
protoInputFile.write(protobufBytes)
# cmd = f"/opt/homebrew/bin/protoc --decode_raw < ./{protoInputFileName} > {protoOutputFileName}"
cmd = f"protoc --decode_raw < {protoInputFileName} > {protoOutputFileName}"
os.system(cmd)
protoParseResult = loadTextFromFile(protoOutputFileName)
protoInputFile.close()
protoOutputFile.close()
return protoParseResult
def decodeProtobuf_hexStr(protobufBytesHexStr):
"""
Decode protobuf bytes from hex string to json string
"""
protobufBytes = bytes.fromhex(protobufBytesHexStr)
return decodeProtobuf_bytes(protobufBytes)