将字符串转换为十六进制,如“88”到0x88

时间:2014-01-21 12:04:23

标签: c gtk

我正在使用gtk +。如何将字符串转换为十六进制,如char * p =“88”转换为unsigned char s = 0x88。我需要在数组中将字符串值从表格分配给字节元素。

2 个答案:

答案 0 :(得分:1)

#include <stdlib.h>

char *end = NULL;
s = strtol(p, &end, 16);
//check errno here
if (p==end)
    printf ("I smell fish - most likely something is wrong.");

请注意,基数限制在[2-36]

的范围内

据我所知,glib/gtk+

没有strtol特定包装

有关完整示例,请参阅man strtol

答案 1 :(得分:1)

#include <stdint.h> // better integer types
#include <stdlib.h> // strtoul, NULL

const char* p = "88";
uint8_t s = (uint8_t) strtoul(p, NULL, 16);

评论:

  • 指向字符串文字的指针应始终声明为const。
  • 对于小整数类型,首选stdint.h中的类型,因为它们比默认的整数类型(例如int)更安全。
  • 有许多函数可以将字符串转换为整数。最灵活的是“strto ...”函数:strtol(字符串到烧尽长),strtoul(字符串到无符号长),strtod(字符串到双)等等上。对于小于long的整数类型,不存在此类转换函数。
  • 您希望结果是无符号的,因此最好使用strtoul函数来防止各种隐式类型提升问题。
  • 由于该函数返回unsigned long,因此将其强制转换为预期类型uint8_t
  • 函数的第3个参数告诉您希望数字转换具有哪个基数。 2表示二进制,8表示八进制,10表示十进制或16表示十六进制。