当前位置: 首页 > 知识库问答 >
问题:

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

闻人修明
2023-03-14

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

在C#中,我有一个字节数组,< code>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, 173, 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# < code > Guid(byte[]bytes) ctor的源代码,虽然它是对< code>Guid中的位置的简单赋值,但是< code>Guid中的位置有11个,并且是以下类型:< code>int 、< code>short和< code>byte,这是Python中没有的,我不想在Python中进行按位操作来模拟c#类型。

共有1个答案

孔华池
2023-03-14

刚刚也遇到了这个问题…通过在构造函数中使用bytes_le参数而不是字节来解决它:

uuid.UUID(bytes_le = bytes)
 类似资料:
  • 主要内容:1、实例构造函数,2、静态构造函数,3、私有构造函数在 C# 中,构造函数就是与类(或结构体)具有相同名称的成员函数,它在类中的地位比较特殊,不需要我们主动调用,当创建一个类的对象时会自动调用类中的构造函数。在程序开发的过程中,我们通常使用类中的构造函数来初始化类中的成员属性。 C# 中的构造函数有三种: 实例构造函数; 静态构造函数; 私有构造函数。 1、实例构造函数 构造函数是类中特殊的成员函数,它的名称与它所在类的名称相同,并且没有返回值。当

  • 主要内容:构造函数的重载,默认构造函数在 C++中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。这种特殊的成员函数就是 构造函数(Constructor)。 在《 C++类成员的访问权限以及类的封装》一节中,我们通过成员函数 setname()、setage()、setscore() 分别为成员变量 name、age、score 赋值,这样做虽然有效,但显得有点

  • 问题内容: 在C ++中,从构造函数内部调用虚拟函数时,它的行为不像虚拟函数。 我认为第一次遇到这种行为的每个人都会感到惊讶,但第二次认为这是有道理的: 只要派生的构造函数没有被执行的对象是 不是 又一个 衍生 实例。 那么如何调用派生函数呢?前提条件还没有建立的机会。例: Java和.NET完全相同,但是他们选择了另一种方式,这可能是 产生最少惊讶原则 的唯一原因吗? 您认为哪个是正确的选择?

  • 主要内容:默认拷贝构造函数拷贝和复制是一个意思,对应的英文单词都是 。 对于计算机来说,拷贝是指用一份原有的、已经存在的数据创建出一份新的数据,最终的结果是多了一份相同的数据。例如,将 Word 文档拷贝到U盘去复印店打印,将 D 盘的图片拷贝到桌面以方便浏览,将重要的文件上传到百度网盘以防止丢失等,都是「创建一份新数据」的意思。 在 C++ 中,拷贝并没有脱离它本来的含义,只是将这个含义进行了“特化”,是指用已经存在的对

  • C++ 类 & 对象 类的构造函数 类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。 构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。 下面的实例有助于更好地理解构造函数的概念:#include <iostream> using namespace std; class Line { public: v

  • 本文向大家介绍php构造函数与析构函数,包括了php构造函数与析构函数的使用技巧和注意事项,需要的朋友参考一下 php构造函数是对象创建完成后,第一个自动调用的方法,析构函数是当对象被释放之前最后一个自动调用的方法。本文章向大家介绍php构造函数与析构函数。 php构造函数 1.是对象创建完成后,“第一个”“自动调用”的方法 2.构造方法的定义,方法名是一个固定的, 在php4中:和类名相同的方法