繁体   English   中英

使用 void* 作为缓冲区存储 uint_32 变量作为 RAM memory。如何读写它?

[英]Using a void* as a buffer to store uint_32 variables acting as RAM memory. How to read and write to it?

我遇到的问题是针对使用分配了 N 个字节的 void* 模拟 RAM memory 的项目。 始终是 4 的倍数。其中一个要求是必须使用 void*,因此我无法使用 uint_32 或 char 来使用它。

这是电流

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <stdint.h>

int main(void) {

void* mem = malloc(4096); //allocate 4096 bytes

uint32_t* test1 = malloc(sizeof(uint32_t));
*test1=12344444;

uint32_t* test2 = malloc(sizeof(uint32_t));
*test2=56788888; //declaring some test values

memcpy(&mem, &test1, sizeof(uint32_t)); //I try to copy test1 to the start of void*
memcpy(&mem+sizeof(uint32_t), &test2, sizeof(uint32_t)); //I try to copy test2 next to test1

print(mem);
return 0;

}

我做了一个简单的打印来查看正在写入缓冲区的内容。

void print(void* buffer){
for(int i = 0; i<4096; i+=sizeof(uint32_t)){
    printf ("%d ", *((uint32_t*)(buffer+i)));
}

}

问题是我在其中一些索引中得到了一些奇怪的值,并且在我执行第一个 memcpy 之后我的两个测试被一些奇怪的数据分开。

12344444 0 0 0 0 0 33 0 56788888

我在这里做错了什么? 还有另一种方法,同时仍然使用 void* 作为内存吗? 我需要做什么才能访问存储在第 n 个字节的变量?

谢谢

mem 和 test1 已经是目标缓冲区和源缓冲区的指针,所以这样做

memcpy(mem, test1, sizeof(uint32_t));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM