我有一個字符串(ISO 8859-1)與一些非ASCII字符,任何想法如何轉換爲整數或二進制?非ASCII字符二進制或整數在C + +
例如
STR具有這樣的文字: 「值5 = \ 377 \ 242 \ 242」
我需要改造\ 377 \ 242 \ 242爲二進制(我試圖與蒂或strtol將但沒有按'T工作)
由於
我有一個字符串(ISO 8859-1)與一些非ASCII字符,任何想法如何轉換爲整數或二進制?非ASCII字符二進制或整數在C + +
例如
STR具有這樣的文字: 「值5 = \ 377 \ 242 \ 242」
我需要改造\ 377 \ 242 \ 242爲二進制(我試圖與蒂或strtol將但沒有按'T工作)
由於
字符是數字已/二進制 - 在C,一個字符是整數類型。
什麼可能會讓你感到困惑的是,字符串文字"\377\242\242"
有3個字符,而不是12個。在C中,後面跟1-3個數字0-7是八進制轉義序列。
如果指數介紹字符串"\377\242\242"
,你得到的結果如下(僞代碼):
"\377\242\242"[0] == 255 == '\377';
"\377\242\242"[1] == 162 == '\242';
"\377\242\242"[2] == 162 == '\242';
就拿C字符的細節來看看here文字。
ascii和binary混合的事實意味着它是非標準的。所以你必須按照慣例來玩:如果約定在「value 5 =」字符串之後有一個小端的4字節整數,那麼你可以把一個指針放在那裏,如果你在小端系統。
在你的情況(3個字節)
int threeBytesToInt(char* p)
{
return ((unsigned int)p[0]) * (255L * 255L) + ((unsigned int)p[1]) * 255L + ((unsigned int)p[2]);
}
可以做的伎倆給出的權利公約
如果可能的話,避免使用這些結構或去一個「乾淨」的約定,以儘量減少移植問題。 在一個乾淨的約定中,二進制數據的格式將在ascii部分中描述。
我很困惑你的要求。
根據ISO 8859表,八進制值377和242不代表數字字符,例如, '0'到'9'。因此使用strtoul
不可能將3個字符轉換爲一個整數。
八進制值377,242和242表示3個8位量或24位總數。這個位的數量不是2的乘方,所以我想你不會把所有的位都轉換成二進制。 (儘管24位常用於描述顏色值)。
您是否希望將值顯示爲二進制文本數字,如八進制377中的'11111111'?如果是這種情況,請使用std::strtoul
,以2爲基數。
否則,請說明您的要求或問題。給出一個示例程序片段,顯示您想要實現的內容(僞代碼也可以)。
你如何存儲這個字符串? – 2010-03-01 16:17:55
const char * myString = text-> getText()。c_str(); – ger123 2010-03-01 16:29:03
用快速谷歌我無法找到ISO 8959這是ISO 8859的拼寫錯誤嗎?如果是這樣的字符表在這裏:http://en.wikipedia.org/wiki/ISO_8859-1 – 2010-03-01 16:36:28