2013-02-07 30 views
0

我有代碼,其中用戶輸入兩個字符到一個string變量。我有一個函數驗證用戶輸入只有兩個字符長,並且它只包含有效的十六進制數字。將兩個字符的字符串變量轉換爲十六進制

我想寫這些數字到32字節長的二進制文件。我想:

outFile.write((char*)&string[0], 1); 

在運行32次(我想要寫一次一個字節)來測試一個循環,但它只是寫的ASCII碼的字符,而不是實際字符本身。我期望它寫一個nybble並跳過一個nybble,但是它寫了一個完整字節的ascii信息。所以我試過:

outFile.write((unsigned char*)&string[0], 1); 

但我的編譯器抱怨說它是一個無效的轉換。

我想解決這個問題,而不會將字符串轉換爲c樣式的字符串。換句話說,我想string包含兩個字符,並代表一個字節的信息。不是四個(加上空字符)。

回答

1

您有一個表示整數的字符串。因此字符串轉換爲整數:

unsigned char byte = (unsigned char)std::stoi(string, 0, 16); 
outFile:write(static_cast<const char*>(&byte), 1); 
+0

不能這樣做的。 g ++ 4.7.2抱怨stoi不是std的成員,即使使用'#include '和C++ 11啓用(它是默認情況下)。 – user2048881

+0

@ user2048881:我無法幫助您的標準庫不完整。它當然是[標準的一部分](http://en.cppreference.com/w/cpp/string/basic_string/stol),所以向libstdC++維護者抱怨。 –

+0

我知道這是標準的一部分。謝謝,不過。我有點希望你能幫我找到一種替代方法來做到這一點,或者是一種解決方法。不過謝謝你。 – user2048881

0

作爲一種變通方法爲您丟失Stoi旅館,你可以這樣做:

#include <iostream> 
#include <sstream> 
#include <ios> 

char hexnum[]{"2F"}; // or whatever, upper or lowercase hex digits allowed. 
std::istringstream input(hexnum); 
int num=0; 
input >> std::hex >> num; 
unsigned char byte = num; 
outFile.write(static_cast<const char*>(&byte), 1); 
相關問題