# 蓝牙UUID及其128位换算

2.5.1 UUID

A UUID is a universally unique identifier that is guaranteed to be unique across all space and all time.  UUIDs can be independently  created in a distributed fashion. No central registry of assigned UUIDs is required.  A UUID is a 128-bit value.
To reduce the burden of storing and tr ansferring 128-bit UUID values, a range of UUID values has been pre-allocated for assignment to often-used, regis-tered purposes. The first UUID in this  pre-allocated range  is known as the Bluetooth Base UUID and has the value 000000 00-0000-1000-8000-00805F9B34FB, from the Bluetooth  Assigned Numbers document. UUID val-ues in the pre-allocated range have aliases that are represented as 16-bit or 32-bit values. These aliases  are often called 16-bit and  32-bit UUIDs, but it is important to note that each actually represents a 128-bit UUID value.

The full 128-bit value of a 16-bit or 32-bit UUID may be computed by a simple arithmetic operation.

128_bit_value=16_bit_value*2^96+Bluetooth_Base_UUID

128_bit_value=32_bit_value*2^96+BIuetooth_Base_UUID

A 16-bit UUID may be converted to 32-bit UUID format by zero-extending the 16-bit value to 32-bits. An equivalent method is to add  the 16-bit UUID value to a zero-valued 32-bit UUID.
Note that two 16-bit UUIDs may be compared directly, as may two 32-bit UUIDs or two 128-bit UUID s. If two UUIDs of differing sizes are to be compared, the shorter UUID must be converted to the longer UUID fo rmat before comparison.

UUID类可表现为短整形（16或32位）和长整形（128 位）UUID。

UUID值被固定分配在某个范围，该范围的第一个数值称为蓝牙UUID基数(Bluetooth_Base_UUID)，其值为00000000—0000—1000—8000—00805F9B34FB。在此范围中，UUID用一个 16位或32位的二进制数表示，经常被称作16位或32位UUID。它的实际值代表一个 128位数。

128位的UUID值与16位或32位的UUID值之间的换算关系如下：

128_bit_value=16_bit_value*2^96+Bluetooth_Base_UUID

128_bit_value=32_bit_value*2^96+BIuetooth_Base_UUID

16位的UUID可以通过扩展16个0转换成32位的UUID。如果两个UUID值位数相同，则可以直接比较，如果位数不同，则需按照上述关系，将短UUID转换成长UUID，位数相同后再比较。

• 广告
• 抄袭
• 版权
• 政治
• 色情
• 无意义
• 其他

120