将char * string转换为hex uint16

时间:2017-06-28 09:10:32

标签: c string hex converter strtol

我需要构建一个函数,我的输入是一个char *字符串,我需要得到“相同的表示”但是在uint16中。

例如:

input: "12"  -->  output: 0x0012
input: "0"   -->  output: 0x0000
input "123"  -->  output: 0x0123
input "1234" -->  output: 0x1234
PD:我不能使用strtol,sscanf等“官方功能”......

1 个答案:

答案 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;
}