2012-06-28 174 views
0

我需要做的是以下內容。用戶輸入十六進制到十六進制陣列

const char *arrayHex[4]; 
for(int i = 0; i < 5; i++) 
{  
cin << uHex; 
arrayHex[i] = uHex; 
} 

但我需要arrayHex的成員是十六進制與\ x轉義。我該怎麼做呢?

這是真的措辭含糊,編輯以固定(希望)

如果輸入爲41,我想在打印時爲「A」的結果,因爲如果該值是「\ X41」

+3

你的循環錯了!你的數組只有4個元素,但你循環從i = 0到4,這是5 –

+0

...和'arrayHex'是一個char指針數組。 'uHex'也是一個指針,或者你的意思是創建一個字符數組?如果後者,'const'應該被省略,因爲你正在分配給該數組。 – eran

+0

@Michael發佈一個示例輸入和輸出? – anatolyg

回答

0
#include <iostream> 
#include <string> 
#include <cstdlib> // for strtol() 
#include <cstdio> // for printf() 
#define countof(array) (sizeof(array)/sizeof(array[0])) 

int main() 
{ 
    std::string uHex; 
    long arrayValues[4]; 
    for(int i = 0; i < countof(arrayValues); ++i) 
    { 
     std::cin >> uHex; 
     char* end; 
     arrayValues[i] = std::strtol(uHex.c_str(), &end, 16); 
     // At this point, we expect end to be pointing at the '\0' 
     // (the C-string nul terminator). If it's not, then we have 
     // invalid chars in our input, and arrayValues[i] is bogus. 
     if (*end != '\0') 
     { 
      std::cout << "Invalid characters: \"" << uHex << "\" (please try again)\n"; 
      --i; // compensate for the ++i above to re-try this again 
     } 
    } 

    for(int i = 0; i < countof(arrayValues); ++i) 
    { 
     std::cout << i << " --> " << arrayValues[i] << " --> " 
        << static_cast<char>(arrayValues[i]) << '\n'; 
//  std::printf("%d --> %d --> %c\n", i, arrayValues[i], arrayValues[i]); 
    } 
} 

請注意,我正在以兩種方式打印完全相同的輸出:使用cout或使用printf()。我個人喜歡printf(),不是因爲這是我第一次學到的東西,但是因爲printf()格式化輸出比cout更不詳細(對於MOST內置類型),儘管cout更靈活,因爲您可以創建cout輸出函數用於用戶定義的類型。但是如果你的編譯器沒有執行printf()/ scanf()格式參數類型檢查(GCC確實如果啓用它),那麼你可以很容易地創建一些令人感興趣的混淆輸出和不匹配類型,並創建很好的非確定性通過指定少於您的格式字符串指示的參數,SEGV生成器很容易。

+0

不完全是我所需要的,我需要它被十六進制轉義。例如,用戶輸入41,當我打印41保存到它的值時,打印出「A」 – Michael

+0

@Michael - 好吧,我改變了它以做我認爲你現在要做的事。如果你沒有意識到這一點,一個數字可以(並且實際上應該在大多數情況下)以純數字(二進制​​)形式存儲在計算機中,例如'int','long','unsigned int'等。作爲std :: string或char []數組(直接或通過char *)存儲的數字並不是真正的數字,就CPU而言。 CPU不能直接加/減/乘/除等存儲爲字符數字的數字。在其純數字(二進制​​)形式中,數字不是「十進制」或「十六進制」,它只是純數字。 – phonetagger

+0

...數值只能以「十進制」或「十六進制」形式表示(即打印)。如果以「decimal」或「hex」形式(即在std :: string或char []/char *)中存儲數字,則不會將其存儲爲CPU理解爲數。然而,由於特定領域的原因,包括高精度科學/工程計算,數據庫等,有時會使用其他存儲格式(包括std :: string/char []/char *)。 – phonetagger