最近项目组让我来做安全模块,在数据传输之前需要将数组转换文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.
Thingsboard3.4-OTA升级
张志翔的博客: