這裏是一個更短的版本我的代碼:未成功使用sscanf的十六進制值讀取
char token[256];
unsigned int maskval = 0;
//Token gets read in here.
printf("token: %s\n", token);
if (sscanf(token + 2, "%x", &maskval) == 1) {
//do stuff
} else {
printf("error: %d, %x\n", maskval, maskval);
}
正如你可以看到我傳遞十六進制字符串的函數,閱讀他們進入令牌和使用的sscanf( )將字符串版本的十六進制值轉換爲無符號整數。字符串標記始終以「0x」,「0X」,「Ox」或「OX」開頭。原因是因爲當輸入值時用戶將無法區分0或O之間的差異(vi顯示它們相同,圖形)。結果我得到,如果我通過它「0x00EE」是:
token: 0x00EE
error: 0
我相信這個問題是我是否通過它的東西一起「0x00EE」或「OxOOEE」(零的與資本O公司)的線路。在vi中兩者看起來都是一樣的,我不確定在這種情況下它們的處理方式是否有所不同。希望我只是在做一些非常簡單而愚蠢的事情,但我忽略了它(通常是這樣)。另外,我還使用
maskval = strtol(token, NULL, 16);
代替的sscanf()嘗試,但我得到同樣的結果。
任何想法?
在我的VIM,'0'中有一個點,而'O'不! – Shahbaz 2012-04-18 14:01:49
不應該是'char token [256];'??? – dasblinkenlight 2012-04-18 14:01:54
另外,'%x'也可以讀取'0x'部分,所以你不需要寫'token + 2'好的答案! – Shahbaz 2012-04-18 14:02:21