正在将硬盘驱动器串行字符串写入二进制文件

本文关键字:字符串 二进制文件 硬盘驱动器 | 更新日期: 2023-09-27 17:57:46

我有一个简单的函数,可以从C:''驱动器获取硬盘驱动器序列号,并将其放入字符串:

ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid='"C:'"");
disk.Get();
string hdStr = Convert.ToString(disk["VolumeSerialNumber"]);

然后,我试图将上面的字符串转换为ASCII,然后将其写入二进制文件,我遇到的问题是,当转换此字符串并使用streamwriter保存文件,并在十六进制编辑器中打开文件时,我看到了我最初想要写入的更多字节,例如"16342D1F4A61BC"

将显示为:08 16 34 2d 1f 4a 61 c2 bc

它以某种方式添加了08和c2。。。

更完整的版本如下:

string constructor2 = "16342D1F4A61BC";
string StrValue = "";
while (constructor2.Length > 0)
{
    StrValue += System.Convert.ToChar(System.Convert.ToUInt32(constructor2.Substring(0, 2), 16)).ToString();
    // Remove from the hex object the converted value
    constructor2 = constructor2.Substring(2, constructor2.Length - 2);
}
FileStream writeStream;
try
{
    writeStream = new FileStream(Path.GetDirectoryName(Application.ExecutablePath) + "''license.mgr", FileMode.Create);
    BinaryWriter writeBinay = new BinaryWriter(writeStream);
    writeBinay.Write(StrValue);
    writeBinay.Close();
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}

有人能帮我了解这些是如何添加的吗?

正在将硬盘驱动器串行字符串写入二进制文件

试试这个:

string constructor2 = "16342D1F4A61BC";
File.WriteAllBytes("test.bin", ToBytesFromHexa(constructor2));

使用以下帮助程序:

public static byte[] ToBytesFromHexa(string text)
{
    if (text == null)
        throw new ArgumentNullException("text");
        List<byte> bytes = new List<byte>();
    bool low = false;
    byte prev = 0;
    for (int i = 0; i < text.Length ; i++)
    {
        byte b = GetHexaByte(text[i]);
        if (b == 0xFF)
            continue;
        if (low)
        {
            bytes.Add((byte)(prev * 16 + b));
        }
        else
        {
            prev = b;
        }
        low = !low;
    }
    return bytes.ToArray();
}
public static byte GetHexaByte(char c)
{
    if ((c >= '0') && (c <= '9'))
        return (byte)(c - '0');
    if ((c >= 'A') && (c <= 'F'))
        return (byte)(c - 'A' + 10);
    if ((c >= 'a') && (c <= 'f'))
        return (byte)(c - 'a' + 10);
    return 0xFF;
}

尝试使用System。文本编码。ASCII。GetBytes(hdStr)以获取表示ASCII中字符串的字节。

文件中的endian-ness对您有多重要?

也许你可以使用这样的东西:

byte[] b = BitConverter.GetBytes(Convert.ToUInt32(hdStr, 16));