转换hexstring(char )为int?

我有一个char [],包含一个值,如“0x1800785”,但我想赋予该值的函数需要一个int,如何将其转换为一个int? 我已经四处搜寻,但找不到答案。 谢谢。

你有没有试过strtol()

strtol – 将string转换为长整数

例:

 const char *hexstring = "abcdef0"; int number = (int)strtol(hexstring, NULL, 16); 

如果数字的string表示以0x前缀开始,则必须使用0作为基数:

 const char *hexstring = "0xabcdef0"; int number = (int)strtol(hexstring, NULL, 0); 

(也可以指定一个明确的基数,例如16,但我不build议引入冗余。)

像这样的东西可能是有用的:

 char str[] = "0x1800785"; int num; sscanf(str, "%x", &num); printf("0x%x %i\n", num, num); 

读男人sscanf

假设你的意思是一个string,那么strtol呢?

或者如果你想有自己的实现,我写这个快速函数为例:

 /** * hex2int * take a hex string and convert it to a 32bit number (max 8 hex digits) */ uint32_t hex2int(char *hex) { uint32_t val = 0; while (*hex) { // get current character then increment uint8_t byte = *hex++; // transform hex character to the 4bit equivalent number, using the ascii table indexes if (byte >= '0' && byte <= '9') byte = byte - '0'; else if (byte >= 'a' && byte <='f') byte = byte - 'a' + 10; else if (byte >= 'A' && byte <='F') byte = byte - 'A' + 10; // shift 4 to make space for new digit, and add the 4 bits of the new digit val = (val << 4) | (byte & 0xF); } return val; } 

尝试下面的代码块,它为我工作。

 char *p = "0x820"; uint16_t intVal; sscanf(p, "%x", &intVal); printf("value x: %x - %d", intVal, intVal); 

输出是:

 value x: 820 - 2080 

我做了类似的事情,认为这可能会帮助你实际上为我工作

 int main(){ int co[8],i;char ch[8];printf("please enter the string:");scanf("%s",ch);for(i=0;i<=7;i++){if((ch[i]>='A')&&(ch[i]<='F')){co[i]=(unsigned int)ch[i]-'A'+10;}else if((ch[i]>='0')&&(ch[i]<='9')){co[i]=(unsigned int)ch[i]-'0'+0;}} 

这里我只带了8个字符的string。 如果你想要添加类似的逻辑“a”到“f”来给出相应的hex值,我没有这样做,因为我不需要它。

我在不使用stdio.h情况下做了hex/十进制转换。 使用非常简单:

 unsigned hexdec (const char *hex, const int s_hex); 

在第一次转换之前初始化用于转换的数组:

 void init_hexdec (); 

这里github上的链接: https : //github.com/kevmuret/libhex/

使用xtoi(stdlib.h)。 该string具有“0x”作为前两个索引,因此通过发送xtoi&val [2]来修改val [0]和val [1]。

xtoi( &val[2] );