[Windows] [VS] [C] [取得指针所指内存的十六进制形式字符串]
接口定义如下:
1 #include <Windows.h> 2 3 // 取得指针所指内存的十六进制形式字符串,size指定字节长度 4 #define Mem_toString(address, size) _Mem_toString((PBYTE)address, size) 5 6 // 取得指针所指内存的十六进制形式字符串,size指定字节长度 7 PSTR _Mem_toString(PBYTE address, size_t size);
实现如下:
1 #include "MemUtil.h" 2 #include <stdlib.h> 3 #include <stdio.h> 4 5 PSTR _Mem_toString(PBYTE address, size_t size ){ 6 PSTR $pstr = NULL; 7 int $i = 0; 8 int $length = sizeof(char)* size* 3; // 返回的字符串所需堆内存的长度 解释一个字节需要3个字符(包含一个空格,最后一个空格用作结尾符'\0') 9 10 if(address== NULL || size== 0 || size> 1024 ) return NULL; // 此处限制size大小1024 11 12 $pstr = (PSTR) malloc($length); 13 for(; $i< size; $i++ ){ 14 char tmp[3] = { 0 }; // 3个字符缓冲 15 sprintf(tmp, "%X", *address++); 16 tmp[1]== '\0'? 17 sprintf(&$pstr[$i*3], "0%s ", tmp ): // 补零对齐 18 sprintf(&$pstr[$i*3], "%s ", tmp ); 19 } 20 $pstr[$length-1] = '\0'; 21 return $pstr; 22 }
我们来测试一下:
输出: