我有一個程序的一部分,我需要隨機化一個字符串中的字符,但對如何執行此操作感興趣,程序可移植到可能不會使用ASCII編碼字符的系統。在C中實現二進制編碼字符的安全編碼?
目前我只是分配對應於ASCII表中一系列值的隨機整數。
與您如何做'sizeof(int)'類似,您如何安全地編碼隨機字符的賦值?
我知道你可以創建一個靜態數組,每個字符都存在,並從一個隨機索引中分配一個字符,但我很好奇,看看是否有其他選擇。
我有一個程序的一部分,我需要隨機化一個字符串中的字符,但對如何執行此操作感興趣,程序可移植到可能不會使用ASCII編碼字符的系統。在C中實現二進制編碼字符的安全編碼?
目前我只是分配對應於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。每個表項都需要使用明確的值並以endian獨立的方式。考慮如下的小尾數。
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 */ }
...
你只對字母數字字符感興趣嗎?或者整個字符集? – effeffe
只需字母數字字符即可。如果我也想要整套音樂會有什麼不同? – sherrellbc
使用字母數字字符與字符集的部分獨立性是因爲它們的值必須是「contiguos」(對於英文不好):'A','B',...'Z',數字相同。編輯:**沒有**,對不起,這只是數字所必需的。 – effeffe