Странный блокнот ++ 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.

Другие вопросы по тегам