如何在C# WinForm中实现1E00A84ACC与11029196的转换?
RFID标签数值转换问题解答
1. 十六进制1E00A84ACC转十进制11029196的方法
1E00A84ACC是64位十六进制数,11029196是它的低32位有效数值,转换方式:
- 将十六进制字符串转为64位无符号整数:
Convert.ToUInt64("1E00A84ACC", 16); - 强制转换为
uint类型提取低32位,结果即为十进制11029196; - 也可直接截取十六进制后7位
0A84ACC,转十进制得到目标值。
2. 十进制0011029196还原完整十六进制1E00A84ACC的方法
十进制0011029196仅对应原64位十六进制的低32位,丢失的1E0是高32位的十六进制值(对应十进制480)。还原步骤:
- 将高32位数值
480左移32位,再与低32位十进制值11029196做按位或运算; - 将运算得到的64位整数转为十六进制字符串,即可得到
1E00A84ACC。
3. C# WinForm中的实现代码
十六进制转目标十进制
// 十六进制字符串转低32位十进制 string hexInput = "1E00A84ACC"; ulong fullHexValue = Convert.ToUInt64(hexInput, 16); uint low32Decimal = (uint)fullHexValue; // low32Decimal的值为11029196
十进制还原完整十六进制
// 已知低32位十进制和高32位十六进制前缀 uint lowDecimal = 11029196; uint highPart = Convert.ToUInt32("1E0", 16); // 高32位对应的十进制480 ulong fullValue = ((ulong)highPart << 32) | lowDecimal; string fullHexOutput = fullValue.ToString("X"); // 输出"1E00A84ACC" // 若需要固定10位长度,使用ToString("X10")
串口读取十六进制的处理
从串口读取字节流时,需先转换为十六进制字符串(注意字节序适配):
// 示例:串口读取到的大端序字节(对应1E00A84ACC) byte[] serialBytes = new byte[] { 0x1E, 0x00, 0xA8, 0x4A, 0xCC }; // 系统为小端序时,反转数组适配大端数据 if (BitConverter.IsLittleEndian) { Array.Reverse(serialBytes); } // 转换为无分隔符的十六进制字符串 string hexFromSerial = BitConverter.ToString(serialBytes).Replace("-", ""); // 后续可复用前面的转换逻辑
内容的提问来源于stack exchange,提问作者Châu Nguyễn
相关产品推荐
相关产品推荐

