如何将整数转换为十六进制格式的USB厂商ID、产品ID?
十进制整数转USB VID/PID十六进制格式方案
转换规则
USB厂商ID(VID)、产品ID(PID)均为16位无符号整数,转换后要求为带0x前缀的4位大写十六进制格式,不足4位时在开头补前导0,转换逻辑为标准十进制转十六进制运算:
- 将十进制整数反复除以16,记录每次的余数
- 余数0-9对应十六进制字符0-9,余数10-15对应A-F
- 将所有余数倒序排列,不足4位时开头补0,最后添加
0x前缀即可
示例验证
和你给出的转换结果完全匹配:
- 9025转十六进制得到2341,补前缀后为
0x2341 - 5824转十六进制得到16C0,补前缀后为
0x16C0 - 1155转十六进制得到483,补1位前导0后为0483,补前缀后为
0x0483
安卓端实现代码
你可以直接在安卓项目中集成以下方法,无需依赖第三方工具:
Kotlin 实现
fun intToVidPidHex(value: Int): String { // 只保留16位有效位,格式化输出4位大写十六进制 return "0x%04X".format(value and 0xFFFF) }
Java 实现
public static String intToVidPidHex(int value) { // 屏蔽高位溢出值,输出符合规范的VID/PID格式 return String.format("0x%04X", value & 0xFFFF); }
之前工具不符的原因
你使用的字符串转十六进制工具,是将输入的内容当做文本字符串,逐字符转换为对应ASCII值的十六进制表示,和整数进制转换是完全不同的逻辑,所以输出结果不符合预期。如果需要使用在线工具,选择「十进制整数转十六进制」类的工具即可,不要使用字符串相关的转换工具。
内容的提问来源于stack exchange,提问作者Wai Yan Hein
相关产品推荐
相关产品推荐

