2010-03-01 62 views
-1

我有一個字符串(ISO 8859-1)與一些非ASCII字符,任何想法如何轉換爲整數或二進制?非ASCII字符二進制或整數在C + +

例如

STR具有這樣的文字: 「值5 = \ 377 \ 242 \ 242」

我需要改造\ 377 \ 242 \ 242爲二進制(我試圖與蒂或strtol將但沒有按'T工作)

由於

+0

你如何存儲這個字符串? – 2010-03-01 16:17:55

+0

const char * myString = text-> getText()。c_str(); – ger123 2010-03-01 16:29:03

+0

用快速谷歌我無法找到ISO 8959這是ISO 8859的拼寫錯誤嗎?如果是這樣的字符表在這裏:http://en.wikipedia.org/wiki/ISO_8859-1 – 2010-03-01 16:36:28

回答

4

字符是數字已/二進制 - 在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文字。

0

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部分中描述。

0

我很困惑你的要求。

根據ISO 8859表,八進制值377和242不代表數字字符,例如, '0'到'9'。因此使用strtoul不可能將3個字符轉換爲一個整數。

八進制值377,242和242表示3個8位量或24位總數。這個位的數量不是2的乘方,所以我想你不會把所有的位都轉換成二進制。 (儘管24位常用於描述顏色值)。

您是否希望將值顯示爲二進制文本數字,如八進制377中的'11111111'?如果是這種情況,請使用std::strtoul,以2爲基數。

否則,請說明您的要求或問題。給出一個示例程序片段,顯示您想要實現的內容(僞代碼也可以)。