在单片机中使用,StringHextoHex 可能会出错
参数2 会被 从uint8_t 转为 uint32_t ,提示错误
可用uint32 类型接收数组,通过对取值 强转(uint8_t) 并&0xFF 得到所需值。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef unsigned char uint8_t;
// 将十六进制的字符串 转换为十六进制的 数组
int StringHextoHex(char *str, unsigned char *out, int *outlen)
{
if (str == NULL || out == NULL)
return -1;
int i = 0, ret = 0;
ret = (strlen(str) / (2 * sizeof(char))) + strlen(str) % (2 * sizeof(char));
for (i = 0; i < ret; i++)
sscanf(str + 2 * i, "%02X", (unsigned int *)(out + i));
if (outlen!= NULL)
*outlen = ret;
return ret;
}
int main()
{
unsigned char out[]={0};
char str[] = "MQTT";
char hex[2 * strlen(str) + 1];
int i;
int outlen = 0;
for (i = 0; i < strlen(str); i++) {
sprintf(hex + 2 * i, "%02x", str[i]);
}
printf("string '%s': %s\n", str, hex);
StringHextoHex(hex,out,&outlen);
for (i = 0; i < outlen; i++) {
printf("%02x ",out[i]);
}
return 0;
}
输出:
string 'MQTT': 4d515454
4d 51 54 54
文章评论