奇怪的 Notepad++ HEX 编辑器插件
Strange Notepad++ HEX-editor plugin
目标是将字节数组写入文件。
我有一些字节的字节数组 fits[] 然后:
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);
}
}
}
在十六进制编辑器中 img_correct.myf 看起来像这样:
bd 19 bd 72 bd 93 bd f7
在 HEX 编辑器中 img_strange.myf 看起来像这样:
33 08 33 3f 3f 3f
您的源文件大小可以被 4 整除吗?如果不是,则在操作结束时将忽略任何剩余字节。 i += 4 将跳过它们。如果源(适合)文件不能被 4 完全整除,则您需要在 for 循环之后最后处理这些问题。
您正在使用 Notepad++ 的 HEX-Editor 插件,它似乎有一个 problem reading binary files.
尝试使用另一个十六进制编辑器,它应该会显示正确的值。
这是 HxD 和 HEX-Editor 显示同一文件的屏幕截图
对于全角冒号":"
正确的 Unicode 格式是:U+EF1A
但是在 NotePad++ 中十六进制编辑器中的“:”显示“EFBC9A”而不是“EF1A”。
因为这是 UTF8 编码,而不是 Unicode 格式。
如果我在另一个编辑器中输入“EFBC9A”,它会显示韩文字符“벚”。
当您在十六进制编辑器中直接输入时,请确保使用 UTF8 编码,但当您不在十六进制编辑器中时,请确保使用 Unicode 格式而不是 UTF8 编码。
所以人们混淆了 UTF8 编码和 Unicode 格式。
顺便提一下:U+EF1A --> ":"可以放在Windows系统文件夹名里.
目标是将字节数组写入文件。 我有一些字节的字节数组 fits[] 然后:
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);
}
}
}
在十六进制编辑器中 img_correct.myf 看起来像这样: bd 19 bd 72 bd 93 bd f7
在 HEX 编辑器中 img_strange.myf 看起来像这样: 33 08 33 3f 3f 3f
您的源文件大小可以被 4 整除吗?如果不是,则在操作结束时将忽略任何剩余字节。 i += 4 将跳过它们。如果源(适合)文件不能被 4 完全整除,则您需要在 for 循环之后最后处理这些问题。
您正在使用 Notepad++ 的 HEX-Editor 插件,它似乎有一个 problem reading binary files.
尝试使用另一个十六进制编辑器,它应该会显示正确的值。
这是 HxD 和 HEX-Editor 显示同一文件的屏幕截图
对于全角冒号":" 正确的 Unicode 格式是:U+EF1A
但是在 NotePad++ 中十六进制编辑器中的“:”显示“EFBC9A”而不是“EF1A”。
因为这是 UTF8 编码,而不是 Unicode 格式。
如果我在另一个编辑器中输入“EFBC9A”,它会显示韩文字符“벚”。
当您在十六进制编辑器中直接输入时,请确保使用 UTF8 编码,但当您不在十六进制编辑器中时,请确保使用 Unicode 格式而不是 UTF8 编码。
所以人们混淆了 UTF8 编码和 Unicode 格式。
顺便提一下:U+EF1A --> ":"可以放在Windows系统文件夹名里.