2013-01-14 53 views
0

我有一個字符串是這樣的:輸入十六進制字符串爲char一次

315c4eeaa8b5f8aaf9174145bf43e1784b8fa00dc71d885a804e5ee9fa40b16349c146fb778cdf2d3aff021dfff5 

有沒有辦法讀它從文件一次進入腦海的字符串對象保持每2個字符是一個字節的十六進制表示?即我需要一個閱讀轉換從十六進制到字符。

UPDATE
夥計們,請仔細閱讀我問的問題。
我可以寫入轉換函數並沿着一個字符串循環。
但是我需要讀一串十六進制字符串立即
沒有任何循環。沒有人工轉換。
類似於cin >> ...some string variable...
謝謝。

UPDATE2
想象我有串"315c4eeaa8b5"。我想寫一些類似cin >> string_var的文件,並獲取包含完全"'0x31','0x5c','0x4e','0xea','0xa8','0xb5'"的string_var。請注意,這最後是一個序號std::string。即0x31,0x5c,etc是字符代碼。
希望它使事情更清晰。

+1

您的更新使其更加清晰。你是否希望將這些數據從hex-ascii *轉換爲任何*?它聽起來就像你想要的字符對從hex-ascii轉換爲字節equivs,在你提供的示例中,它恰好是下面的實際ASCII字符。那是對的嗎?所有這些都沒有循環,沒有轉換,並被捲入一些提取操作員內部。 – WhozCraig

+0

是的,我確切地知道它們是什麼,不,你沒有用簡單的提取操作符(除非你寫它並在所述提取器內執行2個字符到數序的代碼轉換)。在std lib中沒有要做的事情。你已經說過你可以寫/寫轉換循環,那麼還有其他什麼嗎? – WhozCraig

+0

我問了這個問題,我必須自己做出這種轉換。 – OlegG

回答

0

可以使用的IStream :: opeartor >>用的std ::六角機械臂解析爲十六進制:

ifstream in("..."); 
char buffer[3]; 
vector<char> chars; 

while (in.read(buffer, 2)) 
{ 
    buffer[2] = '\0'; 

    char c; 
    istringstream(buffer) >> hex >> c; 
    chars.push_back(c); 
} 
1

要麼你代碼的東西了,或者你使用的東西已經存在。如果你正在使用C++ IO流,那麼我建議看看Boost.IOStreams庫,尤其是它的Filtering Streams概念。您可以使用擴展2.2.5.2 input_filter教程示例的選項卡作爲您的十六進制輸入過濾器實現的基礎。

相關問題