从 C++ 中的 unsigned char 字节流中读取值
Read values from unsigned char bytestream in C++
我的任务是从无符号字符数组中读取元数据值,该数组包含二进制 .shp 文件 (Shapefile) 的字节
unsigned char* bytes;
存储在数组中的文件头和存储信息的顺序如下所示:
int32_t filecode // BigEndian
int32_t skip[5] // Uninteresting stuff
int32_t filelength // BigEndian
int32_t version // LitteEndian
int32_t shapetype // LitteEndian
// Rest of the header and of the filecontent which I don't need
所以我的问题是如何在考虑字节顺序的情况下提取此信息(当然除了跳过部分)并将其读入相应的变量。
我考虑过使用 ifstream,但不知道如何正确使用。
示例:
读取二进制的前四个字节,确保大端字节顺序,存储在int32_t中。然后跳过 5* 4 Bytes (5 * int32)。然后读取四个字节,保证big endian字节顺序,存入一个int32_t中。然后读取四个字节,保证小端字节序,再次存入一个int32_t,以此类推。
感谢大家的帮助!
所以 'reading' 字节数组只是意味着从字节数组中您知道存储数据的位置提取字节。然后你只需要做适当的位操作来处理字节序。例如,filecode
就是这个
filecode = (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3];
和version
就是这个
version = bytes[13] | (bytes[14] << 8) | (bytes[15] << 16) | (bytes[16] << 24);
(版本的偏移量为13似乎有点奇怪,我只是继续你上面所说的)。
我的任务是从无符号字符数组中读取元数据值,该数组包含二进制 .shp 文件 (Shapefile) 的字节
unsigned char* bytes;
存储在数组中的文件头和存储信息的顺序如下所示:
int32_t filecode // BigEndian
int32_t skip[5] // Uninteresting stuff
int32_t filelength // BigEndian
int32_t version // LitteEndian
int32_t shapetype // LitteEndian
// Rest of the header and of the filecontent which I don't need
所以我的问题是如何在考虑字节顺序的情况下提取此信息(当然除了跳过部分)并将其读入相应的变量。
我考虑过使用 ifstream,但不知道如何正确使用。
示例:
读取二进制的前四个字节,确保大端字节顺序,存储在int32_t中。然后跳过 5* 4 Bytes (5 * int32)。然后读取四个字节,保证big endian字节顺序,存入一个int32_t中。然后读取四个字节,保证小端字节序,再次存入一个int32_t,以此类推。
感谢大家的帮助!
所以 'reading' 字节数组只是意味着从字节数组中您知道存储数据的位置提取字节。然后你只需要做适当的位操作来处理字节序。例如,filecode
就是这个
filecode = (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3];
和version
就是这个
version = bytes[13] | (bytes[14] << 8) | (bytes[15] << 16) | (bytes[16] << 24);
(版本的偏移量为13似乎有点奇怪,我只是继续你上面所说的)。