protoc

  • protoc
    • 安装:(PC端安装)二进制文件protoc
      • Mac
        • 安装
          brew install protobuf
          
        • 升级
          brew upgrade protobuf
          

解码

核心代码:

################################################################################
# protoc
################################################################################
decodedJsonStr = decodeProtobuf_bytes(protobufBytes)
print("decodedJsonStr=%s" % decodedJsonStr)
# decodedJsonStr = decodeProtobuf_hexStr(protobufBytesHexStr_noSpace)
# print("decodedJsonStr=%s" % decodedJsonStr)
saveTextToFile(parseResultFile_protoc, decodedJsonStr)

相关工具类

详见:

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)

results matching ""

    No results matching ""