Я пытаюсь разобрать двоичный файл, содержащий значения. В спецификациях сказано, что каждое значение равно , представленному как 2-байтовое целое число в формате дополнения 2. Я чтения файла в массив байтов называется «данные»:java - чтение 2 байтовых целых чисел в дополнении 2 из двоичного файла в целое число
int i = (data[i] & 0xff) | (short) (data[i+1] << 8);
Значения выглядят хорошо, однако, когда я пытаюсь записать их обратно в файл:
byte a = (byte)((tempInt >> 8) & 0xff);
byte b = (byte)(tempInt & 0xff);
«tempInt», являющегося значение в int.
Когда я прочитал в файле, который я написал, не все значения одинаковы. Некоторые из них, но не все.
Я что-то упустил?
ОБНОВЛЕНИЕ: Я собираю значения для сравнения. Верхняя половина - это значения, которые я читаю из файла. Нижняя половина - это значения, которые я прочитал из файла, затем написал новый файл и затем снова прочитал. Я думаю, что графики выглядят слишком схожими, чтобы быть совершенно неправильными.
UPDATE # 2: байт я прочитал из входного файла:
0, 0, 59, 36, 40, 36, 23, 36, 54, 36, 54, 36, 41, 36, 46, 36, 50, 36, 52, 36, 79, 36, 79, 36, 66, 36, 65, 36, 58, 36, 58, 36, 58, 36, 45, 36, 51, 36, 65, 36, 65, 36, 76, 36, 78, 36, 69, 36, 54, 36, 68, 36, 86, 36, 85, 36, 81, 36, 81, 36, 80, 36, 84, 36, 84, 36, 80, 36, 82, 36, 85, 36, 81, 36, 80, 36, 75, 36, 75, 36, 79, 36, 91, 36, 83, 36, 64, 36, 71, 36, 79, 36, 56, 36, 38, 36, 47, 36, 51, 36, 41, 36, 48, 36, 63, 36, 56, 36, 50, 36, 57, 36, 67, 36, 78, 36, 81, 36, 67, 36, 81, 36, 81, 36, 82, 36, 69, 36, 66, 36, 66, 36, 54, 36, 39, 36, 78, 36, 78, 36, 78, 36, 62, 36, 57, 36, 73, 36, 75, 36, 69, 36, 76, 36, 81, 36, 74, 36
Преобразованных целых чисел:
0, 9275, 9256, 9239, 9270, 9270, 9257, 9262, 9266, 9268, 9295, 9295, 9282, 9281, 9274, 9274, 9274, 9261, 9267, 9281, 9281, 9292, 9294, 9285, 9270, 9284, 9302, 9301, 9297, 9297, 9296, 9300, 9300, 9296, 9298, 9301, 9297, 9296, 9291, 9291, 9295, 9307, 9299, 9280, 9287, 9295, 9272, 9254, 9263, 9267, 9257, 9264, 9279, 9272, 9266, 9273, 9283, 9294, 9297, 9283, 9297, 9297, 9298, 9285, 9282, 9282, 9270, 9255, 9294, 9294, 9294, 9278, 9273, 9289, 9291, 9285, 9292, 9297, 9290
байт я считываемые из файла, который я написал из выше значения:
32, 0, 0, 36, 59, 36, 40, 36, 23, 36, 54, 36, 54, 36, 41, 36, 46, 36, 50, 36, 52, 36, 79, 36, 79, 36, 66, 36, 65, 36, 58, 36, 58, 36, 58, 36, 45, 36, 51, 36, 65, 36, 65, 36, 76, 36, 78, 36, 69, 36, 54, 36, 68, 36, 86, 36, 85, 36, 81, 36, 81, 36, 80, 36, 84, 36, 84, 36, 80, 36, 82, 36, 85, 36, 81, 36, 80, 36, 75, 36, 75, 36, 79, 36, 91, 36, 83, 36, 64, 36, 71, 36, 79, 36, 56, 36, 38, 36, 47, 36, 51, 36, 41, 36, 48, 36, 63, 36, 56, 36, 50, 36, 57, 36, 67, 36, 78, 36, 81, 36, 67, 36, 81, 36, 81, 36, 82, 36, 69, 36, 66, 36, 66, 36, 54, 36, 39, 36, 78, 36, 78, 36, 78, 36, 62, 36, 57, 36, 73, 36, 75, 36, 69, 36, 76, 36, 81, 36
Преобразованных целые числа:
32, 9216, 9275, 9256, 9239, 9270, 9270, 9257, 9262, 9266, 9268, 9295, 9295, 9282, 9281, 9274, 9274, 9274, 9261, 9267, 9281, 9281, 9292, 9294, 9285, 9270, 9284, 9302, 9301, 9297, 9297, 9296, 9300, 9300, 9296, 9298, 9301, 9297, 9296, 9291, 9291, 9295, 9307, 9299, 9280, 9287, 9295, 9272, 9254, 9263, 9267, 9257, 9264, 9279, 9272, 9266, 9273, 9283, 9294, 9297, 9283, 9297, 9297, 9298, 9285, 9282, 9282, 9270, 9255, 9294, 9294, 9294, 9278, 9273, 9289, 9291, 9285, 9292, 9297
UPDATE # 3: Хорошо, так что я сделал небольшую версию программы, где я только что прочитал в байтах от файла превратил их в целые числа, превратил их обратно в байты и написал их в файл. Без всего формата данных. И это действительно сработало. Таким образом, проблема связана с алгоритмом, а не с байтом с преобразованием int (и обратно в байт). Я вернусь и проверю алгоритм. Спасибо за помощь :)
спасибо за ответ :) Я изменил порядок, однако значения все еще немного отличаются. i plottet значения для сравнения в обновлении – cmplx96
@ cmplx96: Графики таких графиков не так полезны, как предоставление входных и выходных данных * чисел *, в идеале с [mcve]. (Мы очень мало знаем о том, как этот граф был действительно сгенерирован - что еще есть за пределами «читать номер, записать число».) –
Я добавил значения. Больше ничего. Я прочитал файл, сохранил его в целочисленном виде, а затем сохранил его в байтах. – cmplx96