奇怪的Notepad ++ HEX编辑器插件

时间:2016-03-09 01:26:45

标签: c# .net unicode hex-editors

目标是将字节数组写入文件。 我有字节数组[],有一些字节,然后:

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] = 0×27
  • 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-editor中的

img_correct.myf如下所示: bd 19 bd 72 bd 93 bd f7

HEX-editor中的

img_strange.myf如下所示: 33 08 33 3f 3f 3f

3 个答案:

答案 0 :(得分:8)

您正在使用Notepad ++中的HEX-Editor插件,该插件似乎有problem reading binary files

尝试使用其他十六进制编辑器,它应显示正确的值。

以下是显示相同文件的HxD和HEX-Editor的屏幕截图 as you can see here

答案 1 :(得分:2)

对于全宽冒号“:” 正确的Unicode格式为:U + EF1A

但在NotePad ++中,十六进制编辑器中的“:”显示“ EFBC9A ”而不是“ EF1A ”。

因为这是UTF8编码&amp;这不是Unicode格式。

如果我将“ EFBC9A ”放在另一个编辑器中,则显示韩文字符“벚”。

当您直接键入十六进制编辑器时,请确保使用UTF8编码,但是当您不在十六进制编辑器中时,请使用Unicode格式而不是UTF8编码。

因此人们对UTF8编码和Unicode格式感到困惑。

顺便说一句:U + EF1A - &gt; “:”可以放在Windows系统中的文件夹名称中。

答案 2 :(得分:1)

您的源文件大小是否可以被4整除?如果不是,则在操作结束时将忽略任何剩余字节。 i + = 4将跳过它们。如果源(拟合)文件不能被4完全整除,那么您需要在for循环之后处理最后的那些。