C++ UUID以整数形式存储

3
在linux下使用c++将UUID转换为128位整数是否可行?一旦我将UUID转换为整数,我需要将16字节整数转换为字节数组,以便通过TCP将其发送到另一台服务器。据我所知(如果我错了,请纠正),C++没有针对处理16字节整数的开箱即用支持,您能否请指点一下如何做到这一点?如果无法将其存储并作为整数发送,则考虑将uuid作为字符串发送。

2
为什么不直接使用boost.uuid - KillianDS
  1. 你最初持有UUID的形式是什么?
  2. 你想对这个128位整数执行哪些操作?
- Robᵩ
我将其保存为字符串,但我意识到我是从uuid_t生成字符串的,它基本上是unsigned char [16],所以我想我不需要做任何转换,但我想知道这16个字节是否与.NET的GUID兼容。 - erin c
@Erin:也许你应该把那个作为一个问题发布。 - ildjarn
我宁愿先试一试,谢谢你的建议 :) - erin c
2个回答

4
为什么要将它表示为128位整数?
UUID是如何表示的?它可能是一个字符串或已经是一些16字节的类型。如果它是一个字符串,那么你可以自己计算出16字节的数组表示,如果它已经是一些16字节长的类型,那么你可以直接将其视为16字节的数组。
与往常一样,无论你做什么,你都必须确保所有参与方都同意网络表示的字节顺序。
C++实现不需要具有128位整数类型,但内置类型中可能有一个是128位的,例如long long。或者你的实现可能会提供一个扩展整数类型供你使用。
Clang和GCC都支持__uint128_t类型,但不幸的是它们没有遵循这种类型的C++要求的扩展整数。然而,128位算术应该可以工作,所以你应该能够将UUID放入这个类型中,然后将其视为16字节的数组。

谢谢大家,我找到了我需要的东西,uuid.h 能够生成 UUID 类型的 uuid_t,它是一个大小为 [16] 的无符号字符数组。我不需要将其转换为任何东西。我想知道这 16 个字节是否与 .Net 的 GUID 类型兼容。 - erin c

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接