将 char* 字符串转换为十六进制 uint16 [关闭]
Posted
技术标签:
【中文标题】将 char* 字符串转换为十六进制 uint16 [关闭]【英文标题】:Conversion char* string to hex uint16 [closed] 【发布时间】:2017-12-01 13:39:19 【问题描述】:我需要构建一个函数,我的输入是一个 char *string,我需要在 uint16 中获得“相同的表示”。
例如:
input: "12" --> output: 0x0012
input: "0" --> output: 0x0000
input "123" --> output: 0x0123
input "1234" --> output: 0x1234
PD:我不能使用strtol、sscanf等“官方函数”...
【问题讨论】:
然后考虑编写您的函数,如果您对此有任何疑问,请回来。 你忘了问问题,顺便说一句。 【参考方案1】:这个怎么样?
#include <stdio.h>
#include <stdint.h>
unsigned int
trans(unsigned char c)
if ('0' <=c && c <= '9') return c - '0';
if ('A' <=c && c <= 'F') return c - 'A' + 0x0A;
if ('a' <=c && c <= 'f') return c - 'a' + 0x0A;
return 0;
uint16_t
hex_to_uint16(const char* s)
uint16_t v = 0;
while (*s)
v = (v << 4) + trans(*s++);
return v;
#include <assert.h>
int
main(int argc, char* argv[])
assert(0x0012 == hex_to_uint16("12"));
assert(0x0000 == hex_to_uint16("0"));
assert(0x0123 == hex_to_uint16("123"));
assert(0x1234 == hex_to_uint16("1234"));
assert(0xffff == hex_to_uint16("ffff"));
return 0;
【讨论】:
1)(char*)
在char *p = (char*) s;
中是一个弱实践。使用const char *p = s;
2) if (p > s)
在if (p > s) v = v << 4;
中不需要以上是关于将 char* 字符串转换为十六进制 uint16 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
将 uint16_t 转换为 char[2] 以通过套接字(unix)发送