将内存的内容转换为16进制表示的字符串 字母用大写表示;每个BYTE都用两个字母或数字表示,不满补0,如0xa转换为0A,0转换为00 例如:内存内容为{0x21,0x02,0,0xfa,0xed,0xbc,0x9e,0x33} 则转换出来的字符串为"210200FAEDBC9E33"
时间: 2024-02-16 15:05:30 浏览: 44
好的,以下是一种实现方法:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* mem_to_hex(const void* p, size_t size) {
const unsigned char* bytes = (const unsigned char*) p;
char* hex = (char*) malloc(size * 2 + 1);
char* p_hex = hex;
for (size_t i = 0; i < size; i++) {
p_hex += sprintf(p_hex, "%02X", bytes[i]);
}
*p_hex = '\0';
return hex;
}
int main() {
unsigned char mem[] = {0x21, 0x02, 0, 0xfa, 0xed, 0xbc, 0x9e, 0x33};
char* hex = mem_to_hex(mem, sizeof(mem));
printf("%s\n", hex);
free(hex);
return 0;
}
```
这个程序的实现思路是,首先将输入的内存指针转换为 unsigned char 类型的指针,然后使用 sprintf 函数将每个字节转换为两个十六进制字符,最后将所有的字符拼接在一起并返回。
需要注意的是,这个函数返回的字符串需要在使用完毕后手动释放,否则会导致内存泄漏。
阅读全文