gpt4 book ai didi

c++ - 如何将结构拆分为 block 以便将字节保存到 C/C++ 中的另一个数据结构?

转载 作者:行者123 更新时间:2023-11-28 06:32:03 24 4
gpt4 key购买 nike

我正在尝试将大小为 1536 的结构拆分为三个大小相等的 512 字节 block ,以便可以将其保存到虚拟磁盘中。虚拟磁盘的缓冲区大小限制为 512 字节。偏移指针时出现问题,但我不明白为什么。

这是 SSCCE:

#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <bitset>

#define SECTOR_SIZE 512
#define NUM_SECTORS 10000

typedef struct sector {
char data[SECTOR_SIZE];
} Sector;

static Sector* disk;

struct dataBitmap {
/* sizeof myBits = 1228 bytes */
std::bitset<9795> myBits;
/* 308 bytes not accounted for */
char emptyData[308];
/* dataBitmap will now perfectly overlay 3 sectors of disk */

} dataMap;

void Disk_Write(int sector, char* buffer) {
// quick error checks
if((sector < 0) || (sector >= NUM_SECTORS) || (buffer == NULL)) {
std::cout << "Error!";
}
// copy the memory for the user
if((memcpy((void*)(disk + sector), (void*)buffer, sizeof(Sector))) == NULL) {
std::cout << "Error!";;
}
}

void Update_Bitmaps() {
char * bytes = (char*) malloc(512);

std::cout << "size of dataMap: " << sizeof(dataMap) << '\n';

const void* a = &dataMap;
const void* b = (const void*)((char*)a + 512);

/* data bitmap is 3 times the size of regular sector */
memcpy(&bytes, b, 512);
//Disk_Write(2, (char *) bytes); /* offset for data bitmap is 2 */

memcpy(&bytes, (char *) &dataMap + 512, 512);
Disk_Write(2, (char *) bytes);

//memcpy(&bytes, (char *) &dataMap.myBits + 1024, 512);
//Disk_Write(2, (char *) bytes);

free(bytes);
}

int main()
{
Update_Bitmaps();
return 0;
}

这是程序的输出:

size of dataMap: 1536
0 [main] BitSet 8276 cygwin_exception::open_stackdumpfile:
Dumping stack trace to BitSet.exe.stackdump

Process returned 35584 (0x8B00) execution time : 0.464 s

我知道这是 C 风格的代码,但我不知道如何以这种方式复制字节。感谢您的帮助。

最佳答案

您还没有为磁盘分配内存。

int main()
{
disk = malloc(sizeof(*disk)*NUM_SECTORS); // Allocate memory for disk
Update_Bitmaps();
free(disk); // Free the allocated memory.
return 0;
}

此外,以下几行也不正确。

memcpy(&bytes, b, 512);
//Disk_Write(2, (char *) bytes); /* offset for data bitmap is 2 */

memcpy(&bytes, (char *) &dataMap + 512, 512);

他们需要

memcpy(bytes, b, 512);
// ^^ just bytes, not &bytes.
//Disk_Write(2, (char *) bytes); /* offset for data bitmap is 2 */

memcpy(bytes, (char *) &dataMap + 512, 512);
// ^^ just bytes, not &bytes.

关于c++ - 如何将结构拆分为 block 以便将字节保存到 C/C++ 中的另一个数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27350445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com