用C语言直接输出内存中数据(二进制或十六进制)
inti=97;(回答前请看看我以前提问的问题“C语言整型转换成字符后,地址的问题”,请比较比较两者在内存中表示方法的异同。这个97在内存中肯定是以二进制表示出来的,请问...
int i=97;(回答前请看看我以前提问的问题“C语言整型转换成字符后,地址的问题”,请比较比较两者在内存中表示方法的异同。
这个97在内存中肯定是以二进制表示出来的,请问如和将其直接输出在屏幕中。另外请解释下面得小程序,尤其是以%p输出i。
#include <stdio.h>
int main()
{
int i=97,j,k;
int *p;
p=&i;
printf("%d %p\n",i,j);
}
return 0;
}
改程序改的,没把j删掉,还有吧printf()下方的大括号去掉 ,我知道%p是输出指针,要用取址运算符,我只是不知道%p输出具体数值,会有什么反应. 展开
这个97在内存中肯定是以二进制表示出来的,请问如和将其直接输出在屏幕中。另外请解释下面得小程序,尤其是以%p输出i。
#include <stdio.h>
int main()
{
int i=97,j,k;
int *p;
p=&i;
printf("%d %p\n",i,j);
}
return 0;
}
改程序改的,没把j删掉,还有吧printf()下方的大括号去掉 ,我知道%p是输出指针,要用取址运算符,我只是不知道%p输出具体数值,会有什么反应. 展开
3个回答
展开全部
内存中的数据显然是以二进制形式存放的。
C语言用格式符控制输出内容的进制及格式,例如%d是十进制格式,%o是八进制格式,%x是十六进制格式,但唯独没有二进制的输入输出格式符。因此也就无法将内存单元中的二进制代码原样输出出来。
%p格式符用来输出变量在内存中的地址是个十六进制数。想用%p输出变量i的地址可以,但是无法输出变量i的值。
总结:在C语言中想输出某个内存单元具体的代码值是无法实现的。可以用window自带的MS-DOS系统下的debug程序查看(有点复杂的)。
C语言用格式符控制输出内容的进制及格式,例如%d是十进制格式,%o是八进制格式,%x是十六进制格式,但唯独没有二进制的输入输出格式符。因此也就无法将内存单元中的二进制代码原样输出出来。
%p格式符用来输出变量在内存中的地址是个十六进制数。想用%p输出变量i的地址可以,但是无法输出变量i的值。
总结:在C语言中想输出某个内存单元具体的代码值是无法实现的。可以用window自带的MS-DOS系统下的debug程序查看(有点复杂的)。
展开全部
用windowsAPI函数
readprocessmemory
BOOL ReadProcessMemory(
HANDLE hProcess,
LPCVOID lpBaseAddress,
LPVOID lpBuffer,
DWORD nSize,
LPDWORD lpNumberOfBytesRead
);
参数
hProcess为远程进程的句柄
pvAddressRemote用于指明远程进程中的地址
pvBufferLocal是本地进程中的内存地址
dwSize是需要传送的字节数
pdwNumBytesRead和pdwNumBytesWritten用于指明实际传送的字节数.当函数返回时,可以查看这两个参数的值.
readprocessmemory
BOOL ReadProcessMemory(
HANDLE hProcess,
LPCVOID lpBaseAddress,
LPVOID lpBuffer,
DWORD nSize,
LPDWORD lpNumberOfBytesRead
);
参数
hProcess为远程进程的句柄
pvAddressRemote用于指明远程进程中的地址
pvBufferLocal是本地进程中的内存地址
dwSize是需要传送的字节数
pdwNumBytesRead和pdwNumBytesWritten用于指明实际传送的字节数.当函数返回时,可以查看这两个参数的值.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C不支持二进制输出,只有八进制,十进制和十六进制三种形式,你可以用十六进制,方法是printf("%x",i);
首先这段代码就是错的。没有%p这种形式存在,另外它也不是输出i,而是j,还有怎么多出来一个花括号?
首先这段代码就是错的。没有%p这种形式存在,另外它也不是输出i,而是j,还有怎么多出来一个花括号?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询