【发布时间】:2012-04-29 23:00:11
【问题描述】:
这是我的代码的更简短的版本:
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没有! -
不应该是
char token[256];??? -
另外,
%x也可以读取0x部分,所以你不需要写token+2