gpt4 book ai didi

c++ - 以最有效的形式将 32 位值存储为 C 字符串

转载 作者:行者123 更新时间:2023-11-28 06:36:02 27 4
gpt4 key购买 nike

我正在尝试找到最有效的方法将 32 位散列字符串值编码为文本字符串,以便在低带宽环境中传输/记录。不能使用复杂的压缩,因为在客户端和主机之间记录和发送时,散列值需要包含在人类可读的文本字符串中。

考虑以下人为的示例:

给定键/值映射

table[0xFE12ABCD] = "models/texture/red.bmp";
table[0x3EF088AD] = "textures/diagnostics/pink.jpg";

和字符串格式:

"Loaded asset (0x%08x)"
"Replaced (0x%08x) with (0x%08x)"

它们可以打印为:

"Loaded asset models/texture/red.bmp"
"Replaced models/texture/red.bmp with textures/diagnostics/pink.jpg"

或者如果客户端和服务器知道键/值映射:

"Loaded asset (0xFE12ABCD)"
"Replaced (0xFE12ABCD) with (0x3EF088AD)"

然后接收方可以扫描 (0xNNNNNNNN) 模式并在本地展开它。

这就是我现在正在做的,但我想找到一种更有效地表示 32 位值的方法。一个简单的步骤是使用更好的识别 token :

"Loaded asset $FE12ABCD"
"Replaced $1000DEEE with $3EF088AD"

这已经减少了每个标记的长度 - $ 未在其他任何地方使用,因此这是合理的。

但是,还有哪些其他选项可以使 32 位值更小?我不能使用索引 - 它必须是一个完整的 32 位值,因为在某些情况下,字符串的生成器具有哈希值,有时它具有一个会立即对其进行哈希处理的字符串。

最佳答案

一个常见的解决方案是使用 Base-85 编码。您可以将四个字节编码为五个 Base-85 数字,因为 855> 232。选择 85 个可打印字符并将它们分配给数字值 0..84。然后进行基本转换以进行任何一种方式。由于 ASCII 中有 94 个可打印字符,因此通常很容易找到 85 个“安全”的字符,以将您的字符串限制为“可读”。

关于c++ - 以最有效的形式将 32 位值存储为 C 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26773097/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com