【问题标题】:Write binary/hexadecimal value into .bin file from list of string/int从字符串/整数列表中将二进制/十六进制值写入 .bin 文件
【发布时间】:2025-11-30 18:25:01
【问题描述】:

我想从列表中将一长串二进制数写入二进制文件。该列表现在都是十六进制数字。我下面的代码没有给出我想要的案例 1,而是输出案例 2。请帮助。

案例 1:我需要的是一个二进制文件 - 1A0F83.....

案例 2:但不是 - 314130463833.....

List<string> list = new List<string>(new string[]{"1A", "0F", "83" }); 

using (var s = File.Open("test.bin", FileMode.Create))
{
    var tw = new BinaryWriter(s);                

    foreach (string i in list) // Loop through all strings
    {               
        tw.Write(i);    
    }                             
}

【问题讨论】:

  • 你能描述一下你认为你的代码有什么问题吗?是不写,还是写错了输出?其他错误?
  • 您的代码无法编译。您必须使用十六进制值前缀。
  • listC 来自哪里?它神秘地出现在foreach 循环中......另外,你的int 列表不就是byte 的列表吗?
  • string i in listC - 你不是说int i in list 吗?
  • dymanoid、Matthew Watson 和 Cubrr,是的,我将我的部分代码剪切到这个问题中,并且缺少/错误地声明了一些东西。我编辑了问题,现在它可以编译了。下面的haindl列出了符合我需要的解决方案。谢谢大家。

标签: c# hex binarywriter


【解决方案1】:

如果您想将单个字节序列写入二进制文件,那么只需一次写入一个 byte(而不是大小为 4 个字节的 int)并更改以下行

tw.Write(i);

到这里:

tw.Write((byte)i);

或者如果你想稍微清理你的代码,提高更长序列的性能并使其也可编译,你可以使用这个:

var list = new List<byte> { 0x1A, 0x0F, 0x83 }.ToArray();

using (var s = File.Open("test.bin", FileMode.Create))
using (var tw = new BinaryWriter(s))
    tw.Write(list);

【讨论】:

  • 您的解决方案对我有帮助。但是我有数百万个从 int 转换为 hex 的数据。现在我需要弄清楚如何将我的列表转换为这个带有前缀的字节。谢谢!
  • @LipFong 不客气!如果您还有其他问题无法在此处(或您最喜欢的搜索引擎)找到解决方案,那么您可以再问一个问题。
  • @LipFong 我现在看到了你的最后一次编辑。作为一个额外的提示 - 如果你有一个字符串列表并且想要将它们转换为字节,你可以执行以下操作:var list = new List&lt;string&gt; { "1A" }.Select(s =&gt; byte.Parse(s, NumberStyles.HexNumber)).ToArray();