UUID128bit详解
UUID128位是一种用于标识唯一性标识符的格式,它由128位或32个十六进制数字组成。UUID128位通常用于蓝牙低功耗(BLE)设备中,以标识设备提供的服务和特征。
UUID128位由两部分组成:基础部分和变量部分。基础部分包含了UUID的版本号、变体号以及一个唯一标识符。变量部分则用于标识服务或特征所属的设备,以确保其在整个系统中具有唯一性。
在BLE设备中,UUID128位通常用于标识设备提供的服务或特征。服务是一组相关功能的集合,例如传感器、控制器或者数据存储。特征是服务中的一个单独的功能,例如传感器的测量值或者控制器的状态。
UUID128位的设计旨在确保其具有唯一性,并能够被广泛地使用。因此,在使用UUID128位时,需要遵循一些规则和标准以确保其正确性和互操作性。
总之,UUID128位是一种用于标识唯一性标识符的格式,它在蓝牙低功耗设备中广泛使用,以标识设备提供的服务和特征。
一个蓝牙最多能开启多少个服务,UUID是如何包含住这些服务的信息的?麻烦以心率服务的UUID128bit举一个例子
一个蓝牙设备最多可以开启65,535个服务。UUID是一个128位的数字,其中包含了服务的信息。以心率服务为例,它的UUID是由蓝牙SIG组织分配的标准UUID:0000180D-0000-1000-8000-00805F9B34FB。其中,前16位表示UUID类型,0000180D表示它是一个心率服务的UUID类型;后96位用来标识具体的服务,00001000800000805F9B34FB表示它是心率服务的唯一标识。因此,通过UUID,我们可以唯一地识别一个蓝牙服务,例如心率服务的UUID为0000180D-0000-1000-8000-00805F9B34FB。
Macros for conversion of 128bit to 16bit UUID
在计算机系统中,UUID(Universally Unique Identifier,通用唯一标识符)通常用于生成全局唯一的标识。对于128位UUID转换成16位UUID的情况,这种操作通常是出于存储效率或传输便利性的考虑。在许多编程语言中,包括C#、Java等,会提供宏或者库函数来简化这个过程。
例如,在C#中,可以使用BitConverter.GetBytes()
方法配合一些位运算来完成128位到16位的转换。128位UUID分为时间戳、节点部分(48位)、序列号(16位),其中只有最后两个部分组成16进制的16位UUID。这里是一个简化的示例:
// 假设有个128位的Guid值
Guid guid128Bit;
// 转换为Bytes数组,前两块是时间戳,后两块是节点+序列号
byte[] bytes = guid128Bit.ToByteArray();
// 提取最后16位作为16进制字符串
string hex16Bit = BitConverter.ToString(bytes.Skip(8).Take(2)).Replace("-", "").ToLower();
类似地,在Java中,也可以通过long
类型的拆分来处理:
long uuidLong = ...; // 获取128位的long表示的UUID
int[] uuid16Bit = new int[2];
uuid16Bit[0] = (int) (uuidLong >>> 48); // 取低16位
uuid16Bit[1] = (int) uuidLong & 0xFFFF; // 取剩余16位
String uuid16Hex = Long.toHexString(uuid16Bit[0]) + Long.toHexString(uuid16Bit[1]).substring(2);
相关推荐














