获取十六进制数组并将其放入一个字符串或整数变量?

时间:2017-02-06 23:27:11

标签: c arrays string arduino hex

根本不确定如何执行此操作,但我有一个uint8_t数组变量,我想将其放入一个字符串中。所以,

uint8_t uid[] = { 04, 7E, 0B, 72, 44, 34, 84 };

我想把它变成一个字符串,所以它看起来像:

047E0B72443484

我尝试过:

String str = (*char)uid;

但打印出来的str给了我一个乱七八糟的东西:~rD4 8 ?

最后,我不会同意将十进制值表示在一个整数中,两种方法都可以,但我不知道从哪里开始,即

一个值为4126111146852132

的整数

上面的整数来自将十六进制转换为十进制并将其附加在一起:

 - 04 = 4
 - 7E = 126
 - 0B = 11 
 - 72 = 114
 etc...

2 个答案:

答案 0 :(得分:2)

sprintf "%X"可以用来转换为十六进制,但是如果没有一些努力它就不能做任意大小的数组。不妨把这种努力放到更直接的东西上。

#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>

static const char* const HEX_CHARS = "0123456789ABCDEF";

ssize_t to_hex(char* dest, size_t dest_size, const void* src, size_t src_size) {
   if (dest == NULL)
      return src_size*2+1;

   if (dest_size < src_size*2+1)
      return -1;

   while (src_size--) {
      *(dest++) = HEX_CHARS[*((const uint8_t*)src) >> 4];
      *(dest++) = HEX_CHARS[*((const uint8_t*)src) & 0xF];
      src = (const uint8_t*)src + 1;
   }

   *dest = '\0';
   return src_size*2+1;
}

答案 1 :(得分:0)

**解决了!

为清楚起见,我想要这个字符串格式“047E0B72443484”,因为我的最终目标是通过JSON(ArduinoJson.h库)发送这些数据

当我注意到JSON库包含一个发送数组的函数时,我最终完成了我想要做的事情。

JsonArray& uid = root.createNestedArray("UID");
uid.add(testArray[0]);
uid.add(testArray[1]);
uid.add(testArray[2]);
uid.add(testArray[3]);

这让我得到了一个JSON:

{“UID”:[4,126,11,114]}

这正是我试图做的事情