gpt4 book ai didi

c - 在 C 中实现二进制编码字符的安全编码?

转载 作者:行者123 更新时间:2023-11-30 17:46:44 26 4
gpt4 key购买 nike

我有一个程序的一部分,我需要随机化字符串中的字符,但我对如何做到这一点感兴趣,以便该程序可以移植到可能不使用 ASCII 编码字符的系统。

目前,我只是分配与 ASCII 表中的一系列值相对应的随机整数。

与“sizeof(int)”类似,如何安全地编码随机字符的分配?

我知道您可以创建一个包含每个字符的静态数组,并从随机索引中分配一个字符,但我很好奇是否有其他选择。

最佳答案

C 代码字符编码与可以使用的数据无关。

C 代码的字符集独立它可能使用的潜在字符串的编码。人们可以轻松地用 ASCII 编写 C 代码来操作 EBCDIC 或 UTF-8 字符串。

人们可以断言 uint32_t 足以满足任何给定的字符,但是一旦进入 UTF 世界,尽管最大代码点是“\U0010FFFF”,多个代码点可以组成一个字符。任何 UTF 也都包含大量字母数字字符。

假设代码被限制为随机 36 个字母数字字符:0-9,A-Z。按照建议使用表查找在有限情况下适用于各种编码,例如 ASCII、EBCDIC、UTF-8、UTF16-BE、UTF16-BE、UTF32-BE、UTF32-BE。每个表条目都需要使用显式值并以独立于字节序的方式。如下考虑小端。

typedef enum eEncoding {
eASCII,
eUTF16BE,
eUTF16LE,
...
eEncoding_N
};
unit8_t Table[eEncoding_N][36][5];
Table[eASCII][10 /* A */] = { 48, 0, 0, 0, 1 /* Length */ }
Table[eASCII][11 /* B */] = { 49, 0, 0, 0, 1 /* Length */ }
Table[eEBCIDIC][10] = {193, 0, 0, 0, 1 /* Length */ }
Table[eUTF16BE][10] = { 0,48, 0, 0, 2 /* Length */ }
Table[eUTF16LE][10] = { 48, 0, 0, 0, 2 /* Length */ }
...

关于c - 在 C 中实现二进制编码字符的安全编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19184190/

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