作者:小仙女 | 来源:互联网 | 2023-05-18 14:23
作为我的项目的一部分,我有一个二进制数据文件,由一系列32位整数组成,我的一个类在初始化时读入.在我的C++库中,我使用以下初始化程序读取它:
Evaluator::Evaluator() {
m_HandNumbers.resize(32487834);
ifstream inputReader;
inputReader.open("/path/to/file/7CHands.dat", ios::binary);
int inputValue;
for (int x = 0; x <32487834; ++x) {
inputReader.read((char *) &inputValue, sizeof (inputValue));
m_HandNumbers[x] = inputValue;
}
inputReader.close();
};
在移植到Swift时,我决定将整个文件读入一个缓冲区(它只有大约130 MB),然后将这些字节从缓冲区中复制出来.
所以,我做了以下事情:
public init() {
var inputStream = NSInputStream(fileAtPath: "/path/to/file/7CHands.dat")!
var inputBuffer = [UInt8](count: 32478734 * 4, repeatedValue: 0)
inputStream.open()
inputStream.read(&inputBuffer, maxLength: inputBuffer.count)
inputStream.close()
}
它工作得很好,因为当我调试它时,我可以看到inputBuffer包含我的十六进制编辑器应该说的相同的字节数组.现在,我想有效地从那里获取数据.我知道它存储在......你称之为最低有效字节的第一个格式(即数字0x00011D4A在文件中表示为'4A1D 0100').我很想手动迭代它并手动计算字节值,但我想知道是否有一种快速方法可以传递[Int32]数组并让它读取这些字节.我尝试使用NSData,例如:
let data = NSData(bytes: handNumbers, length: handNumbers.count * sizeof(Int32))
data.getBytes(&inputBuffer, length: inputBuffer.count)
但似乎没有加载值(所有值仍为零).有人可以帮我把这个字节数组转换成一些Int32值吗?更好的是将它们转换为Int(即64位整数)只是为了在整个项目中保持我的变量大小相同.