2015-12-17 121 views
3

char readBuf[] = "96 36 D4 D1 F8 C1 8A E0 BF 29 10 91 3C 4D F1 5D 08";轉換值的uint8_t陣列到其十六進制當量在字符數組

我想,這樣我有一個新的char [] 17分開的十六進制值來每對值轉換爲十六進制值。

結果就相當於在代碼編寫這樣的:

char hexStr[] = {0x96, 0x36, 0xD4, 0xD1, 0xF8, 0xC1, 0x8A, 0xE0, 0xBF, 0x29, 0x10, 0x91, 0x3C, 0x4D, 0xF1, 0x5D, 0x08}

我不知道如何從的ReadBuf建立一個新的十六進制值,將其添加到一個新的char []。

+0

你的成績沒有任何意義了我。 readBuf [1]是'6',映射到asciiStr中的0x36,但readBuf [4]也是'6'並映射到0xF8。我錯過了什麼嗎? – nicomp

+0

我已更新,希望能夠更清楚地刪除最後一個讓事情混淆的評論! – Justyn

+0

問題是? – Olaf

回答

1

事情是這樣的:

char readBuf[] = "96 36 D4 D1 F8 C1 8A E0 BF 29 10 91 3C 4D F1 5D 08"; 
size_t length = strlen(readBuf); 
// ideally the length of this should be computed from the string length and allocated dynamically 
uint8_t result[17]; 
size_t pos = 0; 
while(pos * 3 < length) { 
    int value; 
    int scanned = sscanf(readBuf + pos * 3, "%x", &value); 
    if(scanned == 1) { 
     result[pos] = value; 
     pos ++; 
    } else { 
     fprintf(stderr, "Invalid hex number at %zu", pos * 3); 
     break; 
    } 
} 
+0

感謝克里斯,這是更緊湊,並消除了使用十六進制到int方法的需要。它還包括對無效十六進制數的錯誤處理。因此,我已經更新了正確的答案。如果任何人都可以看到爲什麼這不應該被接受的答案,請切入。 – Justyn

相關問題