Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 奇怪的记事本++;十六进制编辑器插件_C#_.net_Unicode_Hex Editors - Fatal编程技术网

C# 奇怪的记事本++;十六进制编辑器插件

C# 奇怪的记事本++;十六进制编辑器插件,c#,.net,unicode,hex-editors,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

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

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_correct.myf如下所示: 屋宇署19屋宇署72屋宇署93屋宇署f7

在十六进制编辑器中,img_strange.myf如下所示:
33 08 33 3f 3f 3f

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

您使用的是记事本++中的HEX编辑器插件,它似乎有一个

尝试使用另一个十六进制编辑器,它将显示正确的值

这里是一个屏幕截图和十六进制编辑器显示相同的文件 对于全宽冒号“:” 正确的Unicode格式是:U+EF1A

但在记事本++中“:”在十六进制编辑器中显示“EFBC9A”而不是“EF1A

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

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

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

所以人们对UTF8编码和Unicode格式感到困惑


顺便说一下:U+EF1A-->“:”可以放在Windows系统中的文件夹名中。

您没有接受异常,是吗?可能文件已锁定,并且没有实际写入(结束)?没有任何异常。没有锁定文件(创建新文件).我尝试使用BinaryWriter-同样的结果。而且,嗯,这很奇怪。你能试着做一个测试以便我们可以试一下吗?我删掉了所有额外的代码,只留下了重要的。编辑了启动消息。我不知道该去哪里。调用
writealBytes
后,尝试将
new.myf
文件读入另一个字节数组y,然后将
img
与新数组逐字节进行比较。它们应该是相同的。答案保持不变。您可能会通过跳过它们来删除额外的字节。目前的代码旨在跳过这些字节,因为它会从每组四个字节中获取前两个字节,并将它们复制到较小的字节数组中。我将ld建议从img的角度,而不是从fits的角度,稍微改变一下编号逻辑。这样做会使索引变得不必要的复杂。将for循环的每个过程和所有字节输出到控制台,看看发生了什么。我简化了代码并更正了启动消息。我明白了。有这根本不是什么问题,只是十六进制编辑器。你可以尝试再次读取新编写的文件,并在Visual Studio或控制台输出中检查字节值。你甚至不需要十六进制编辑器tbh。谢谢:)是的,我使用的是记事本++插件。在HxD中,一切看起来都是正确的!但这个问题不仅发生在N++,而且发生在w还有一些不同的程序。我将32位天文图像转换为16位,第三方软件在转换后在可视化图像方面也有同样的问题。我将尝试不同的方法将32位转换为16位。这种方法看起来很快,但不成功。谢谢你的回答!天哪!!!这阻碍了我们的项目,因为我们认为我们的数据记录被破坏了。我绝望地在谷歌上搜索了“WritealBytes 3f”,找到了这个。非常感谢!
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);
        }
    }
}