Странный блокнот ++ HEX-редактор плагин
Цель состоит в том, чтобы записать байтовый массив в файл. У меня есть байтовый массив подходит [] с некоторыми байтами, а затем:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace _32_to_16
{
class Program
{
static void Main(string[] args)
{
byte[] fits = File.ReadAllBytes("1.myf");
byte[] img = new byte[fits.Length / 2];
for (int i = 0; i < fits.Length; i += 4) //Drops 2 high bytes
{
img[i/2] = fits[i + 2];
img[i/2 + 1] = fits[i + 3];
}
File.WriteAllBytes("new.myf", img);
}
}
}
Перед записью в файл img [] имеет те же значения:
- IMG [0]=0x31
- IMG [1]=0x27
- IMG [2]=0x31
- IMG [3]=0xe2
- и так далее...
После записи в файл, в редакторе HEX я вижу
- 00000000: 31 27 31 3f и другие неправильные значения.
Иногда при других значениях fits [] массив img [] записывает данные в файл правильно. Что я делаю не так?
Файл для теста 1.myf (который дает неправильные результаты) https://www.dropbox.com/s/6xyf761oqm8j7y1/1.myf?dl=0 Файл для теста 2.myf (правильная запись в файл) https://www.dropbox.com/s/zrglpx7kmpydurz/2.myf?dl=0
Я упростил код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace _32_to_16
{
class Program
{
static void Main(string[] args)
{
byte[] img_correct = new byte[8] { 0xbd, 0x19, 0xbd, 0x72, 0xbd, 0x93, 0xbd, 0xf7 };
File.WriteAllBytes("img_correct.myf", img_correct);
byte[] img_strange = new byte[8] { 0x33, 0x08, 0x33, 0xac, 0x33, 0xe3, 0x33, 0x94 };
File.WriteAllBytes("img_strange.myf", img_strange);
}
}
}
в HEX-редакторе img_correct.myf выглядит так: бд 19 бд 72 бд 93 бд f7
в HEX-редакторе img_strange.myf выглядит так: 33 08 33 3f 3f 3f
3 ответа
Вы используете плагин HEX-Editor из Notepad++, который, кажется, имеет проблемы с чтением бинарных файлов.
Попробуйте использовать другой шестнадцатеричный редактор, и он должен отображать правильные значения.
Вот скриншот HxD и HEX-Editor, отображающих один и тот же файл
Для двоеточия полной ширины ":" правильный формат Unicode: U + EF1A
Но в NotePad ++ ":" в Hex Editor показывает " EFBC9A ", а не " EF1A ".
Потому что это кодировка UTF8, а не в формате Unicode.
Если я добавлю " EFBC9A " в другой редактор, он покажет корейский символ "벚".
Когда вы вводите текст в Hex Editor, обязательно используйте кодировку UTF8, но когда вы не в Hex Editor, используйте команду Unicode Format, а не кодировку UTF8.
Так что люди путают с кодировкой UTF8 и форматом Unicode.
Кстати: U + EF1A -> ":" можно поместить в имя папки в системе Windows.
Ваш исходный размер файла делится на 4? Если нет, то любые оставшиеся байты будут игнорироваться в конце операции. Я += 4 собирается пропустить их. Вам нужно будет обработать их в конце, после цикла for, если исходный (подходящий) файл не делится на 4.