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

如何在C++中实现自定义二进制读写以压缩有限字符向量数据?

自定义二进制编解码实现与文件大小分析

一、自定义编解码的实现

完全可以实现你需求的自定义二进制编解码逻辑,核心是给每个目标字符分配固定长度的二进制位(这里是2位),再将二进制位拼接成字节流存储。

编码逻辑

先建立字符与2位二进制的映射:

  • A → 00(十进制0)
  • B → 01(十进制1)
  • C → 10(十进制2)
  • D → 11(十进制3)

以"BADC"为例,依次转换后得到二进制串01 00 11 10,刚好8位(1字节),对应十六进制0x4E(ASCII字符'N')。

用Python实现的编码函数示例:

def custom_encode(input_str):
    char_to_bit = {'A': 0, 'B': 1, 'C': 2, 'D': 3}
    result_byte = 0
    # 逐个字符处理,按左移对应位数拼接
    for idx, char in enumerate(input_str):
        result_byte |= char_to_bit[char] << (6 - 2 * idx)
    return bytes([result_byte])

调用custom_encode("BADC")会返回b'N',即符合要求的二进制编码结果。

解码逻辑

解码时反向操作,将字节拆分为2位一组,映射回原字符:

def custom_decode(input_byte):
    bit_to_char = {0: 'A', 1: 'B', 2: 'C', 3: 'D'}
    byte_value = input_byte[0]
    result_chars = []
    # 从高位到低位拆分2位一组
    for idx in range(4):
        bit_segment = (byte_value >> (6 - 2 * idx)) & 0b11
        result_chars.append(bit_to_char[bit_segment])
    return ''.join(result_chars)

调用custom_decode(b'N')会还原得到"BADC"。

二、编码后的文件大小

是的,仅存储编码后的字节时(不含文件名、文件头、校验信息等额外内容),"BADC"这类4个字符的内容会占用1字节。

如果字符总数不是4的倍数,需要做补位处理(比如在二进制串末尾补0凑满8位),同时解码时要记录原始字符长度,避免把补位的0误判为有效字符。比如3个字符会生成6位二进制,补2位0后占1字节,解码时只取前3个字符对应的二进制段即可。

三、UTF编码效果差的原因

UTF-8、UTF-16等通用编码是为兼容全字符集设计的,对于ASCII范围内的字符,UTF-8每个字符至少占1字节,4个字符就需要4字节;UTF-16则每个字符占2字节,体积更大。而你的场景仅涉及4种字符,自定义编码能将每个字符压缩到2位,4个字符刚好1字节,压缩效率远高于通用编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:22:26