Чтение 2-байтового двоичного файла без знака Int вместо 2-байтового Int со знаком - PullRequest
0 голосов
/ 02 сентября 2018

Я искал здесь и в Google, затем нашел коды, которые позволяют мне писать этот код, который читает двоичный 2-байтный файл НАСА с подписью.

#include <iostream>
#include <fstream>
using namespace std;

const int SRTM_SIZE = 3601;
static int height[SRTM_SIZE][SRTM_SIZE] = {{0},{0}};   //matrix 3601*3601

int main() {

ifstream file("/storage/emulated/0/N52E012.hgt", ios::in | ios::binary);

if(!file) {
cout << "Error opening file!" << endl;
return -1;
}

unsigned char buffer[2];

for (int i = 0; i < SRTM_SIZE; ++i){
for (int j = 0; j < SRTM_SIZE; ++j){

if(!file.read(reinterpret_cast<char*>(buffer), sizeof(buffer))){

cout << "Error reading file!" << endl;

return -1; }

height[i][j] = (buffer[0] << 8) | buffer[1];

}}

// my section

ofstream meinFile;

meinFile.open ("/storage/emulated/0/N52E012.csv");

for(int x = 0; x < SRTM_SIZE; x++){ // from row 1 to row SRTM_Size

for(int y = 0; y < SRTM_SIZE; y++){ // from column 1 to SRTM_Size

int lastCol = SRTM_SIZE-1;
        meinFile << height[x][y] << ((y!=lastCol) ? "," : "");   //avoiding "," after last value in each row

        }

meinFile << endl;
}

meinFile.close();

cout<< "Converted!" <<endl;

return 0;
}

У меня вопрос, как и где изменить этот код, чтобы он мог читать 2-байтовый двоичный файл без знака вместо 2-байтового двоичного файла со знаком?

Подсказка: этот код отлично читает 2-байтовую подпись NASA Int, но также "unsigned", прежде чем "char buffer [2]" заставляет меня запутаться. Я все еще новичок в C ++, но я знаю, что 2-байтовый Int (со знаком или без знака) занимает 4 байта, а число с плавающей запятой 8 байтов.

Редактировать Я думаю, что этот код работает должным образом, хотя в двоичном файле нет отрицательных значений, как в моем случае, но я проверил его, на плитку файла НАСА, которая содержит отрицательные значения, например, в Нидерландах это не работает должным образом, это читает -2 как 65534 !!! Мой вывод, этот код для 2-байтового без знака int вместо 2-байтового со знаком int

...