【发布时间】:2013-01-29 19:59:37
【问题描述】:
我正在尝试将二进制文件读入内存,然后像这样使用它:
struct myStruct {
std::string mystring; // is 40 bytes long
uint myint1; // is 4 bytes long
};
typedef unsigned char byte;
byte *filedata = ReadFile(filename); // reads file into memory, closes the file
myStruct aStruct;
aStruct.mystring = filedata.????
我需要一种方法来访问带有偏移量的二进制文件,并在该偏移量处获得一定的长度。
如果我将二进制文件数据存储在 std::string 中,这很容易,但我认为使用它来存储二进制数据并不是很好的做事方式。 (filedata.substr(offset, len))
合理广泛的 (IMO) 搜索没有找到任何相关信息,有什么想法吗?如果您认为有必要,我愿意更改存储类型(例如更改为 std::vector)。
【问题讨论】:
-
如果你有一个字节*到内存中数据的头部,你为什么不沿着长度走,一边走一边复制数据?只要您增加指针并知道要走多远,一切都很好且容易。
-
但是我怎样才能得到一个特定的长度,而不仅仅是指针当前位置的字节?
-
@LordAro 听起来你知道字符串的长度是 40 字节长,后跟一个 4 字节整数。还要注意以这种方式执行的字节序。
-
您需要尊重字节指针并存储在您使用的任何数据中。
struct1.string = *(bytePtr + sizeof(char)*40); struct1.int1 = *(bytePtr + (sizeof(char)*40 + sizeof(int));。同样,请注意字节顺序,最好将数据序列化。 -
看看
boost::serialize并在网上搜索“c++ serialize”。
标签: c++ storage binaryfiles data-access