You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Guid十六进制格式转换为byte[16]数组

无连字符Guid十六进制字符串转byte[16]的实现方法

你的输入是无连字符的32位十六进制Guid字符串,不需要依赖Guid.ToByteArray(),可以直接按原字符串顺序解析成字节数组,具体有两种常用实现方式:

方式1:手动分组解析(兼容所有.NET版本)

string hexGuid = "ac865c7313e3e347b6c93c9da39ee2c7";
byte[] byteArray = new byte[16];
for (int i = 0; i < 16; i++)
{
    byteArray[i] = Convert.ToByte(hexGuid.Substring(i * 2, 2), 16);
}

这段代码从字符串起始位置开始,每2个字符截取一段,转换成对应字节后按顺序填充到数组中,完全保留原字符串的字节顺序。

方式2:用Convert.FromHexString(.NET 5及以上版本)

如果你的项目基于.NET 5或更高版本,可以用更简洁的官方方法:

string hexGuid = "ac865c7313e3e347b6c93c9da39ee2c7";
byte[] byteArray = Convert.FromHexString(hexGuid);

该方法直接将完整的十六进制字符串转换成字节数组,输入刚好是32个字符(对应16字节),完全匹配需求。


为什么Guid.ToByteArray()会生成不同的字节数组?

核心原因是Guid的字节序规则:

当你通过new Guid(hexGuid)构造Guid对象后调用ToByteArray(),它会按照Guid的标准结构调整字节顺序:

  • Guid分为四个部分:Data1(4字节)、Data2(2字节)、Data3(2字节)、Data4(8字节)。
  • 前三个部分会从字符串的大端字节序转换成小端字节序,只有Data4保持原顺序。

拿你的示例字符串来说,补上连字符后的标准Guid是ac865c73-13e3-e347-b6c9-3c9da39ee2c7:

  • Data1部分是ac865c73,Guid.ToByteArray()会把它转成小端字节序73 5c 86 ac;
  • 而直接按字符串顺序解析的话,这部分字节是ac 86 5c 73,两者顺序完全相反。

这种调整是Guid标准规定的,用于适配不同系统的字节序习惯,但如果你需要严格保留十六进制字符串的原始字节顺序,就不能用Guid.ToByteArray(),必须用直接解析十六进制的方法。


内容的提问来源于stack exchange,提问作者JonnyJon44

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 17:53:27