Вопрос по c – как преобразовать строку в шестнадцатеричное?

3

У меня есть строка0xFFесть ли какая-то функция, какatoi который читает эту строку и сохранить вuint32_t формат?

Для получения дополнительной информации вы можете проверить & quot; целочисленные типы фиксированной ширины & quot; раздел вen.wikipedia.org/wiki/C_data_types Chimera
@ OmarAbdelhafith: Нет; это совершенно другое. SLaks
возможный дубликатstackoverflow.com/questions/9346240/… Omar Abdelhafith

Ваш Ответ

3   ответа
4
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

int main(void) {
    const char *hexValue = "0xFF";
    char *p;
    uint32_t uv=0;
    uv=strtoul(hexValue, &p, 16);
    printf("%u\n", uv);
    return 0;
}
2
const char *str = "0xFF";
uint32_t value;
if (1 == sscanf(str, "0x%"SCNx32, &value)) {
    // value now contains the value in the string--decimal 255, in this case.
}
Если вы сканируете вuint32_t прямо тыmust использование"%"SCNx32 или вы рискуете неопределенным поведением. Если вы сканируете вunsigned int, ты можешь использовать"%x", Тем не менее, для максимальной мобильности, вы должны использовать по крайней мереunsigned long (отсканировано с"%lx") так как не все системы имеют 32-битныеunsigned ints. Если вы выберете этот маршрут по какой-либо причине, вы можете назначить значениеunsigned int или жеunsigned long на вашuint32_t переменнаяafter sscanf() returns.
мне нужно поставить SCNx32 в синтаксисе? мне нужно иметь это, если условие? могу ли я использовать sscanf (str, & quot; 0x% x & quot ;, & amp; value)? user1390048
5

Вы также можете сделать это с помощью такой функции.

unsigned int foo(const char * s) {
 unsigned int result = 0;
 int c ;
 if ('0' == *s && 'x' == *(s+1)) { s+=2;
  while (*s) {
   result = result << 4;
   if (c=(*s-'0'),(c>=0 && c <=9)) result|=c;
   else if (c=(*s-'A'),(c>=0 && c <=5)) result|=(c+10);
   else if (c=(*s-'a'),(c>=0 && c <=5)) result|=(c+10);
   else break;
   ++s;
  }
 }
 return result;
}

пример:

 printf("%08x\n",foo("0xff"));

Похожие вопросы