是否可以在 linux 下使用 c++ 将 UUID 转换为 128 位整数。将 UUID 转换为整数后,我需要将 16 字节整数转换为字节数组,以便可以通过 TCP 将其发送到另一台服务器。
据我所知(如果我错了,请纠正我),在 C++ 中没有处理 16 字节整数的开箱即用支持,你能解释一下如何做到这一点吗?如果无法将其作为整数存储和发送,我正在考虑将 uuid 作为字符串发送。
为什么要将其表示为 128 位整数?
UUID 是如何表示的?大概它是一个字符串或已经是一些 16 字节的类型。如果它是一个字符串,那么您可以自己计算 16 字节数组表示,如果它已经是一些 16 字节长类型,那么您可以直接将其视为 16 字节数组。
与往常一样,无论您做什么,您都必须确保各方就网络表示的字节顺序达成一致。
C++ 实现不需要具有 128 位整数类型,但内置类型之一可能是 128 位。long long也许。或者您的实现可能提供您可以使用的扩展整数类型。
Clang 和我认为 GCC 都支持 __uint128_t 类型,但不幸的是不遵循 C++ 对这种类型的扩展整数的要求。但是 128 位算术应该可以工作,因此您应该能够做正常的事情将 UUID 粘贴到这种类型中,然后将其视为 16 字节数组。