[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);
Mem_toString.h

实现如下:

 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 }
_Mem_toString.c

我们来测试一下:

 

输出:

 

posted @ 2017-11-14 20:33  develon  阅读(322)  评论(0编辑  收藏  举报