将 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 &gt; s)if (p &gt; s) v = v &lt;&lt; 4; 中不需要

以上是关于将 char* 字符串转换为十六进制 uint16 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

将 uint16_t 转换为 char[2] 以通过套接字(unix)发送

将十六进制数组(char *)转换为整数

将 unsigned int + 字符串转换为 unsigned char 向量

超过16位的字符串装16进制

将十六进制字符串(char [])转换为int?

go笔记 - 字符串、数字、byte相互转换