0

我想将crc存储在程序中。为此,请创建包含下一个结构的文件

 struct CRC_DATA {
    uchar label[16];
    ulong crc;
} crcData = {{"fdgnrtrbdbd"}, 0};

我得到文件的大小

struct stat fileStat;
int size = 0;
if(!stat(path.c_str(), &fileStat)) {
    size = fileStat.st_size;
}
return size;

要找到存储 crc 的地方,请执行以下操作

int map_ = shm_open(path.c_str(), O_CREAT | O_RDWR, S_IRWXU);
if (map_ == -1) {
    closeFile();
    return false;
}
ftruncate(map_, size);
void* mapView_ = mmap(0 , size, PROT_READ | PROT_WRITE, MAP_SHARED, map_, 0);

mapView_ 指向内存中文件的开头。

uchar* base = static_cast<uchar*>(mapView_);
uchar* fileEnd = base + size;
uchar* labelStart = std::search(base, fileEnd, crcData.label, crcData.label + sizeof(crcData.label));

核实

if (labelStart == fileEnd) {
    errorStream_.clear();
    errorStream_.str("");
    errorStream_ << "In file '" << fileName_ << "' don't find crc";
    return false;
}

当我运行应用程序时,出现错误“在文件文件名中找不到 crc”。为什么我有 labelStart == fileEnd?

4

0 回答 0