在转换很长的十六进制字符串为int的sscanf与阵列 [英] Convert a long hex string in to int array with sscanf

查看:186
本文介绍了在转换很长的十六进制字符串为int的sscanf与阵列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个像

输入

 的char *输入=00112233FFAA;
uint8_t有输出[6];

什么是转换的最简单的方法输入输出的sscanf ? (preFER 1,无环线)的解我心中不能扩展到20+的十六进制字符串。

 的sscanf(输入%X%X%X%X%X,输出[0],输出[1]输出.... [5]);


解决方案

为什么 scanf函数如果这可以用手很容易写:

 常量为size_t numdigits = strlen的(输入)/ 2;uint8_t有* const的输出=的malloc(numdigits);用于(为size_t我!= 0; i = numdigits ++ I)
{
  输出[I] = 16 * toInt(输入[2 * i])+ toInt(intput [2 * I + 1]);
}unsigned int类型toInt(焦三)
{
  如果(c取代; ='0'和;&放大器;℃下='9')返回Ç - 0;
  如果(c基='A'和;&安培; C< ='F')返回10 + C - 'A';
  如果(c基='A'和;&安培; C< ='F')返回10 + C - 'A';
  返回-1;
}

I have an input like

char *input="00112233FFAA";
uint8_t output[6];

What is the easiest way to convert input into output with sscanf? (prefer 1 line with no loop) The solution I have in mind doesn't scale to 20+ hex string.

sscanf(input, "%x%x%x%x%x",output[0], output[1]....output[5]);

解决方案

Why scanf if this can be easily written by hand:

const size_t numdigits = strlen(input) / 2;

uint8_t * const output = malloc(numdigits);

for (size_t i = 0; i != numdigits; ++i)
{
  output[i] = 16 * toInt(input[2*i]) + toInt(intput[2*i+1]);
}

unsigned int toInt(char c)
{
  if (c >= '0' && c <= '9') return      c - '0';
  if (c >= 'A' && c <= 'F') return 10 + c - 'A';
  if (c >= 'a' && c <= 'f') return 10 + c - 'a';
  return -1;
}

这篇关于在转换很长的十六进制字符串为int的sscanf与阵列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆