2

是否可以在 linux 下使用 c++ 将 UUID 转换为 128 位整数。将 UUID 转换为整数后,我需要将 16 字节整数转换为字节数组,以便可以通过 TCP 将其发送到另一台服务器。

据我所知(如果我错了,请纠正我),在 C++ 中处理 16 字节整数没有开箱即用的支持,你能说明一下如何做到这一点吗?如果无法将其作为整数存储和发送,我正在考虑将 uuid 作为字符串发送。

4

2 回答 2

4

为什么要将其表示为 128 位整数?

UUID 是如何表示的?大概它是一个字符串或已经是一些 16 字节的类型。如果它是一个字符串,那么您可以自己计算 16 字节数组表示,如果它已经是某个 16 字节长类型,那么您可以直接将其视为 16 字节数组。

与往常一样,无论您做什么,都必须确保所有各方都同意网络表示的字节顺序。


C++ 实现不需要具有 128 位整数类型,但其中一种内置类型可能是 128 位。long long也许。或者您的实现可能会提供您可以使用的扩展整数类型。

Clang 和我认为 GCC 都支持 __uint128_t 类型,但不幸的是,不遵循 C++ 对这种类型的扩展整数的要求。但是 128 位算术应该可以工作,因此您应该能够做正常的事情来将 UUID 粘贴到这种类型中,然后将其视为 16 字节数组。

于 2012-05-21T13:36:57.653 回答
0

要在 C++ 中实现 16 字节整数,您可以查看:
http ://straymindcough.blogspot.com/2012/01/on-int128t.html

至于:“是否可以在 linux 下使用 c++ 将 UUID 转换为 128 位整数”。答案是肯定的。

亲切的问候,

于 2012-05-21T13:34:42.077 回答