最近项目组让我来做安全模块,在数据传输之前需要将数组转换文hex字符串进行传输,因为字节数组是不能进行传输的,这个方法非常有用,特此记录便于日后查阅,代码如下:

static uint8_t hex_lookup[16] = { '0', '1', '2', '3', '4', '5', '6', '7',
'8','9', 'a', 'b', 'c', 'd', 'e', 'f' };
static void array2hex(uint8_t* in, int inlen, uint8_t* out)
	int i;
	for (i = 0; i < inlen; ++i)
		out[2 * i] = hex_lookup[in[i] >> 4];
		out[2 * i + 1] = hex_lookup[in[i] & 0x0f];
static void hex2array(uint8_t* in, int inlen, uint8_t* out)
	int i;
	unsigned char r;
	for (i = 0; i < inlen; i += 2)
		r = in[i] - '0';
		if (r > 9) r += '0' + 10 - 'a';
		//printf("%c(%x): %x\n", in[i], in[i], r);
		out[i / 2] = r << 4;
		r = in[i + 1] - '0';
		if (r > 9) r += '0' + 10 - 'a';
		out[i / 2] += r;
		//printf("%c(%x): %x <%x>\n", in[i+1], in[i+1], r, out[i/2]);

以上代码就是将无符号字节数组转为hex字符串的相关代码。

最近项目组让我来做安全模块,在数据传输之前需要将数组转换文hex字符串进行传输,因为字节数组是不能进行传输的,这个方法非常有用,特此记录便于日后查阅,代码如下:static uint8_t hex_lookup[16] = { '0', '1', '2', '3', '4', '5', '6', '7','8','9', 'a', 'b', 'c', 'd', 'e', 'f' };st...
byte数组字符串之间相互转换字符串数组数组字符串使用String类利用16进制字符串 字符串数组 public static void main(String[] args) { String str="失败是成功之母!"; byte[] bytes = str.getBytes(StandardCharsets.UTF_8); 数组字符串 使用String类 public static void main(String[] args) thr
碰到一个需求,需要把硬件读到的uint8_t类型的16进制数据转化为string类型的字符串。 例如,如果读到到的数据是一个uint8_t类型的数组uint8_t code=[5]={0XAA, 0X01, 0XE3, 0X23, 0X34},需要将其转换为string类型字符串"AA01E32334" 当时考虑到的两个思路: 将code先转换为char字符串数组,再转化为string字符串 遍历code的每一个元素,把每一个元素通过std::to_string转化为string类型的字符子串,然后把所有
private String bytesToHex(byte[] bytes) { String hex = new BigInteger(1, bytes).toString(16); private String bytesToHex(byte[] bytes) { StringBuilder sb = new S...
hex转数值 这个起因是昨晚群里有人在讨论怎么把字符串转成HEX方法最佳,讨论到最后变成哪种方法效率最优了。毕竟这代码是要在MCU上面跑的,要同时考虑到时间和空间的最优解。 当然讨论的是有结果的,具体实现的方法和代码在下面展示。 char数组转16进制HEX串 将如下的量 char str[] = “12345”; char data[] = {1,2,3,4,5,0xff}; “313233343500” “0102030405FF” 这样的结果 这个其实很简单,追求速度的话,
今天使用android 编译c++程序遇到问题,谷歌的android系统大体实现了对c语言的支持,但是对c++的支持还不是很全,故编译c++程序和c语言程序有很大的差别,故找些资料深入了解。 C和C++的关系: 就像是win98跟winXP的关系。C++是在C的基础上增加了新的理论,玩出了新的花样。所以叫C加加。 C是C++的基础,C++语言和C语言在很多方 var str = DateTime.Now.ToString(); var encode = Encoding.UTF8; var bytes = encode.GetBytes(str); string str = "This is test string"; byte[] byteArray = System.Text.Encoding.Default.GetBytes(str); 2.字节数组换成字符串: byte[] byteArray = 通过某种方式获取到的字节数组 string str = System.Text.Encoding.Default.GetS 记--C语言实现 文本形式的字符串和十六进制字符串的相互转换。如"01" <==> "3031" 有的数据包含不可见字符,直接打印出来会不可见或残缺,需要转换为十六进制直接看ASCII码值。 二、测试代码 #include <stdio.h> #include <string.h>... typedef unsigned char BOOL_T; typedef unsigned char U8_T; typedef signed char S8_T; typedef unsigned short U16_T; typed... char* hex_to_string(unsigned char* hex, size_t hex_len) { char* str = malloc(hex_len * 2 + 1); size_t i; for (i = 0; i < hex_len; i++) { sprintf(str + i * 2, "%02x", hex[i]); str[hex_len * 2] = '\0'; return str; int main() { unsigned char hex[] = {0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x21}; char* str = hex_to_string(hex, sizeof(hex)); printf("%s\n", str); free(str); return 0; 在上面的示例代码中,我们定义了一个函数 `hex_to_string`,它将一个 unsigned char 类型的数组转换为一个字符串。它首先分配足够多的内存来存储字符串,然后使用 `sprintf` 函数将每个字节转换为两个十六进制数字,并将它们添加到字符串中。在循环结束后,我们将字符串的最后一个字符设置为 NULL,以便我们可以将其作为 C 字符串使用。 Visual Studio报错CRT detected that the application wrote to memory after end of heap buffer. 牛,我就是这个原因,在free的地方报错。回头一看确实是malloc的内存太小了 Thingsboard3.4-OTA升级 张志翔的博客: