有人以奇怪的(错误的)格式传递数据。要解析它我需要:
0x34 = 34
NOT 0x34 = 52(就像在现实生活中一样)
所以,基本上只是扯掉十六进制并假装它一直是十进制的。
任何帮助?
编辑:为了更容易,我需要这样的东西:
int i = 52被传递给一个返回int为34的函数
int i = 85产生的int为55
双重编辑:有些东西倒退了。我今晚挣扎哈哈。
答案 0 :(得分:4)
这是一个适用于unsigned int的解决方案:
unsigned int convert(unsigned int n)
{
unsigned int r;
unsigned int m;
r = 0;
m = 1;
while (n) {
r += m * (n & 0xf);
n >>= 4;
m *= 10;
}
return r;
}
这是反函数:
unsigned int iconvert(unsigned int n)
{
unsigned int r;
unsigned int s;
r = 0;
s = 0;
while (n) {
r += (n % 10) << s;
n /= 10;
s += 4;
}
return r;
}
所以convert(34) = 52
和iconvert(52) = 34
。
答案 1 :(得分:0)
这就是你需要的吗?
char * strip_hex_prefix( char *str)
{
if( str && ( strlen(str) > 2 ) && (strncmp(tolower(str),"0x",2) == 0) )
return str+2;
}
或只是直接在代码中
if( str && ( strlen(str) > 2 ) && (strncmp(tolower(str),"0x",2) == 0) )
str += 2;
并进一步转换为小数
int hex_2_dec(char *str)
{
int len = strlen(str);
int base = 1;
int dec_val = 0;
for (int i=len-1; i>=0; i--)
{
if (str[i]>='0' && str[i]<='9')
{
dec_val += (str[i] - 48)*base;
base = base * 16;
}
else if (str[i]>='A' && str[i]<='F')
{
dec_val += (str[i] - 55)*base;
base = base*16;
}
}
return dec_val;
}