我需要构建一个函数,我的输入是一个char *字符串,我需要得到“相同的表示”但是在uint16中。
例如:
input: "12" --> output: 0x0012
input: "0" --> output: 0x0000
input "123" --> output: 0x0123
input "1234" --> output: 0x1234
PD:我不能使用strtol,sscanf等“官方功能”......
答案 0 :(得分:2)
这个怎么样?
#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;
}