gpt4 book ai didi

c# - 我如何将文件(用 00 字节分隔 unicode 文本)解析为列表?

转载 作者:行者123 更新时间:2023-12-02 08:56:31 24 4
gpt4 key购买 nike

给定十六进制编辑器中的字节选择显示文件用 00 字节分隔文本,它是一个着色文件,带有 Material 名称,后跟确定颜色的 3 字节十六进制代码。这就是为什么它包含像 FF 这样的字节。字节显示如下:

00 11 46 6F 6C 69 61 67 65 5F 45 76 65 72 67 72 65 65 6E 00 FF FF FF 00 0D 46 6F 6C 69 61 67 65 5F 42 69 72 63 68 00 80 A7 55

翻译成ascii如下:

Foliage_Evergreen�ÿÿÿ�
Foliage_Birch�€§U

如何将这些字节分成一个列表并将它们转换为字节值的文本列表?我无法理解我将如何去做......这就是我现在正在做的事情:

OpenFileDialog openFileDialog1 = new OpenFileDialog();

if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
}
string line = System.IO.File.ReadAllText(openFileDialog1.FileName);
byte[] bytes = Encoding.ASCII.GetBytes(line);
List<string> listtext = line.Split('.').ToList();
listBox1.DataSource = listtext;

最佳答案

你不应该这样做,因为某些编码异常的文件会崩溃:

string line = System.IO.File.ReadAllText(openFileDialog1.FileName);
byte[] bytes = Encoding.ASCII.GetBytes(line);

使用File.ReadAllBytes代替,无需读取文本然后转换为字节。

然后您需要将字节数组解析到记录中。

根据您的示例数据,您的格式使用 0 作为字段分隔符,并且字符串前面加上其长度。这是一个如何解析的示例,未经测试:

static IEnumerable<(string, Color)> parse( byte[] data )
{
for( int p = 0; p < data.Length; )
{
// '\0'
if( 0 != data[ p++ ] ) throw new ApplicationException();
// String length byte
int length = data[ p++ ];
// The string; assuming the encoding is UTF8
string name = Encoding.UTF8.GetString( data, p, length );
p += length;
// '\0'
if( 0 != data[ p++ ] ) throw new ApplicationException();
// 3 color bytes, assuming the order is RGB
Color color = Color.FromArgb( 0xFF, data[ p ], data[ p + 1 ], data[ p + 2 ] );
p += 3;
yield return (name, color);
}
}

关于c# - 我如何将文件(用 00 字节分隔 unicode 文本)解析为列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59437849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com