首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用用户输入的十六进制值以c#读取内存地址

使用用户输入的十六进制值以c#读取内存地址
EN

Stack Overflow用户
提问于 2018-02-01 15:12:25
回答 2查看 927关注 0票数 1

其目的是允许用户输入内存地址(以十六进制表示),并打印出地址的内容。

代码正在摩托罗拉68HC11上运行。

到目前为止,我能够使用硬编码值读取内存地址:

代码语言:javascript
复制
void displayMemory(){
    char *p = (char*)0x5000;
    printf("Address Ascii: %s\n",p);
}

但是,我尝试了多种方法来使用用户输入的数据,例如:

代码语言:javascript
复制
void displayMemory(char *arr){
    char *p = arr;
    printf("Address Ascii: %s\n",p);
}

^^其中*arr是输入的十六进制值。例如: 40a

我还尝试将十六进制值编码为char数组,如下所示:

代码语言:javascript
复制
void displayMemory(){
    char *p = "0x5000";
    printf("Address Ascii: %s\n",p);
}

这也不起作用,给了我一个不同的内存地址。

任何想法都会非常感谢,我可能是非常愚蠢!

更新:函数是如何调用的

代码语言:javascript
复制
char *arr;
arr = malloc(size * sizeof(char));
if(arr){
    strncat(arr, &userInput[3], size);
    displayMemory(arr);
}else{
    return 0;
}

userInput is: dm 40a大小是: userInput数字部分的长度(在本例中为3)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-01 15:39:47

你自己就要找到解决办法了。如果将地址输入到char数组中,例如:

代码语言:javascript
复制
char address[16];
printf("Enter address in hexa: ");
scanf("%15", address);

并在其中键入40a,address将指向以下字符数组:{ '4', '0', 'a', '\0', ...}终止null后的内容与此无关。与char *p = "0x5000";中类似,p指向(不可修改的)字符数组{ '0','x','5','0','0','0',‘0’}。假设ASCII在第一种情况下为{ 0x34、0x30、0x41、0、.},第二种情况为{ 0x30、0x78、0x35、0x30、0x30、0x30、0}。在这两种情况下,这都存在于与值无关的任意地址上。

当地址的期望值时,才能起作用。因此,需要将地址读取为整数值,然后将其转换为char指针。

代码语言:javascript
复制
int address;
scanf("%i", &address);
char *p = (char *) address;    // NOT &address!
票数 2
EN

Stack Overflow用户

发布于 2018-02-01 15:33:21

首先,据我所知,这是不可能的。我还问过我的教授,他告诉我,我们不能这样做,实际上,你也不知道哪种类型的数据存储在任何特定的地址。很抱歉,没有办法通过这种方式访问数据。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48566016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档