我正在使用gtk +。如何将字符串转换为十六进制,如char * p =“88”转换为unsigned char s = 0x88。我需要在数组中将字符串值从表格分配给字节元素。
答案 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);
评论:
int
)更安全。strtol
(字符串到烧尽长),strtoul
(字符串到无符号长),strtod
(字符串到双)等等上。对于小于long
的整数类型,不存在此类转换函数。strtoul
函数来防止各种隐式类型提升问题。unsigned long
,因此将其强制转换为预期类型uint8_t
。