gpt4 book ai didi

c++ - 如何将文件中的字节提取为简单的数据类型?

转载 作者:行者123 更新时间:2023-11-30 04:36:42 31 4
gpt4 key购买 nike

我已经尝试了所有我能想到的方法,但仍然无法正常工作。我有一个用 VB.Net 编写的二进制文件,它基本上由一个整数组成(当然是二进制),它告诉我以下数据的数组大小,然后是 float 作为二进制数据。该文件在 VB.Net 中写得很好,我可以使用以下代码通过 Visual C++ 读回它:

ifstream output("c:\\out.ipv", ios::in | ios::binary);
UInt32 len;
UInt32 *ptr2 = (UInt32*)&len;
output.read((char*)ptr2, 4);

这将返回正确的值 456780,字节为:76、248、6、0。当我在 iPad 上运行完全相同的代码时,我得到 1043089572。如果我使用下面的替代方法:

NSData *data = [[NSData alloc] initWithContentsOfFile:filePath];
UInt32 num;
const NSRange numV = {0, 4};
[data getBytes:&num range:numV];

此代码返回一个不同的值 124724,我不确定如何读取从文件中提取的确切字节数。那是我试图弄清楚但无法工作的另一件事。知道为什么在 Visual C++ 中有效的相同方法在 iPad 上无效吗?我真的很茫然。

最佳答案

这听起来像是字节序问题。您可以使用 <libkern/OSByteOrder.h> 中的任何功能以指定的字节顺序读取数据。在你的情况下,你可能想做类似的事情

NSInputStream *istream = [NSInputStream inputStreamWithFileAtPath:filePath];
UInt32 num = 0;
if (istream) {
uint8_t buffer[4];
if ([istream read:buffer maxLength:4] == 4) {
num = OSReadLittleInt32(buffer, 0);
} else {
// there weren't 4 bytes in the file
}
} else {
// the file could not be opened
}

关于c++ - 如何将文件中的字节提取为简单的数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4404386/

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