为什么Python的UUID构造函数与C#Guid构造函数产生不同的结果?

问题描述

我正在尝试编写一个Python实用程序,以将Oracle的RAW字节字符串(作为字符串)转换为Guids,反之亦然。我试图重用我在C#中构建的相同实用程序中的算法,但是从同一字节数组构造GuidUUID会产生不同的Guid / UUID。他们是一样的,不是吗?我读过UUID只是一个更好的名词。

在C#中,我有一个字节数组byte_array,看起来像这样:

{byte[16]}
    [0]: 151
    [1]: 163
    [2]: 6
    [3]: 235
    [4]: 224
    [5]: 173
    [6]: 188
    [7]: 79
    [8]: 182
    [9]: 220
    [10]: 222
    [11]: 173
    [12]: 29
    [13]: 103
    [14]: 37
    [15]: 125

在Python中,我有一个字节数组,如下所示:

array('B',[151,163,6,235,224,173,188,79,182,220,222,29,103,37,125])

这两个数组显然具有相同的内容,但是在C#中:

guid = new Guid(byte_array) -> guid == eb06a397-ade0-4fbc-b6dc-dead1d67257d

在python中:

guid = uuid.UUID(bytes=byte_array.tostring()) -> guid == 97a306eb-e0ad-bc4f-b6dc-dead1d67257d

我看到C#的Guid(...)对字节顺序进行了一些重新排列,而Python的UUID(...)将UUID中的字节顺序保留在字节数组中。

Python结果对于转换Oracle的RAW字节字符串是不正确的,因为我的C#代码有效(正在生产数百行代码)对字节数组显示正确的Guid

我有什么办法可以从Python的字节数组中获得一个UUID/Guid,而该字节数组与C#Guid相同?

我已经查看了C#Guid(byte[] bytes) ctor的来源,虽然它是对Guid中职位的简单分配,但Guid中的职位数量为11,是intshortbyte类型的,我在Python中没有,并且我不想进入按位操作以在Python中模拟C#类型。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)