C# Guid.ToByteArray()是否跨平台?

C# Guid.ToByteArray()是否跨平台?,c#,.net,guid,C#,.net,Guid,我想将Guid存储在不支持Guid/uniqueidentifier数据类型的数据库中,因此我使用.ToByteArray()方法将Guid转换为字节数组。但是,此方法以strage方式转换值: 11223344-5566-7788-9900-AABBCCDDEEFF will become 44, 33, 22, 11, 66, 55, 88, 77, 99, 00, AA, BB, CC, DD, EE, FF 据我所知,这是因为endian排序 我想知道此方法是否会在每个平台(86x硬件

我想将Guid存储在不支持Guid/uniqueidentifier数据类型的数据库中,因此我使用.ToByteArray()方法将Guid转换为字节数组。但是,此方法以strage方式转换值:

11223344-5566-7788-9900-AABBCCDDEEFF
will become
44, 33, 22, 11, 66, 55, 88, 77, 99, 00, AA, BB, CC, DD, EE, FF
据我所知,这是因为endian排序

我想知道此方法是否会在每个平台(86x硬件、64x硬件、Linux、Windows等)上返回相同的结果,并且无论在哪个平台上运行我的软件,字节顺序都不会发生变化。

有关您的问题:

我想知道这个方法是否会返回相同的结果 每个平台(86x硬件、64x硬件、Linux、Windows等)

所有平台都将是相同的

但是,此方法以strage方式转换值:

11223344-5566-7788-9900-AABBCCDDEEFF
will become
44, 33, 22, 11, 66, 55, 88, 77, 99, 00, AA, BB, CC, DD, EE, FF
ToByteArray
返回的顺序与字符串表示不同

见:

请注意,返回字节数组中的字节顺序为 与Guid值的字符串表示形式不同。命令 开始的四字节组和接下来的两个两字节组的 相反,最后两个字节组的顺序和结束 六字节组是相同的


我不知道为什么不将其存储为字符串而不是字节[]?@RonanThibaudau将其存储为字符串时,数据库中需要38字节的主键,而不是16字节的主键。考虑到GUID基本上是随机的(不是真的),字节顺序可能不重要。如今,big-endian机器编写guid的可能性已经非常小了。@HansPassant如果您获取guid的字符串表示形式,在一个平台上将其转换为字节数组,将该字节数组存储在某个位置,在另一个平台上检索字节数组,再将其转换回字符串,这是很重要的,并希望看到原始字符串。这是一件非常明智的事情。啊,你根本没有提到你想把它用作PK,你有什么理由想在不支持guid类型的数据库中这样做?您的数据库将有多大?该大小的相关性如何?为什么不将PK存储为auto incr int并将GUID存储在另一个字段上?特别是,与字符串表示不同,但仍然指定得很好,并且不是特定于平台的。@ava:我不这样认为,但文档肯定会更清楚。@JonSkeet从
到ToByteArray
的顺序不取决于机器的端部吗?(这似乎表明它没有,但我不明白为什么字节会故意以小尾端排序。)@ava:删除你之前的评论,然后在我回复后添加另一条评论,对任何试图阅读它的人都没有帮助。再说一次,我认为没有,但我现在没有一个简单的方法来检查。@JonSkeet对不起,我想补充问题,但编辑时间已过。我在删除之前刷新了一下,以确保您尚未回答,但似乎您太快了。