PowerShell中32位二进制字符串转十六进制的方法求助
PowerShell中32位二进制字符串转十六进制的解决方法
一、现成解决方法
1. 无符号32位整数转换(适用于所有32位二进制字符串)
如果二进制字符串对应无符号整数,直接用[Convert]::ToUInt32()转换,再转十六进制即可,不会出现溢出问题:
$binaryStr = "000010000000001111101000100010" # 二进制转无符号32位整数 $uint32Value = [Convert]::ToUInt32($binaryStr, 2) # 转十六进制(大写用"X",小写用"x") $hexStr = $uint32Value.ToString("X") Write-Output $hexStr # 输出 0803E812
2. 有符号32位整数转换(针对最高位为1的负数场景)
如果二进制是32位有符号负数(最高位为1),用[Convert]::ToInt32()转换,能正确保留符号对应的十六进制:
$binaryStr = "10000000000000000000000000000000" $int32Value = [Convert]::ToInt32($binaryStr, 2) $hexStr = $int32Value.ToString("X") Write-Output $hexStr # 输出 80000000
二、手动实现思路及代码
如果不想依赖内置转换方法,可以手动按二进制与十六进制的映射规则实现:
- 补位对齐:将二进制字符串补前导零,使其长度为4的倍数(1位十六进制对应4位二进制);
- 分组转换:将二进制串按每4位一组拆分,每组转成对应的十六进制字符;
- 拼接结果:把所有分组的十六进制字符拼接成最终字符串。
手动实现函数示例:
function Convert-BinaryToHex { param( [string]$BinaryString ) # 补前导零至4的倍数长度 $paddingLength = (4 - ($BinaryString.Length % 4)) % 4 $paddedBinary = "0" * $paddingLength + $BinaryString # 二进制到十六进制的映射表 $hexMap = @("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F") $hexResult = "" # 逐组处理4位二进制 for ($i = 0; $i -lt $paddedBinary.Length; $i += 4) { $binaryGroup = $paddedBinary.Substring($i, 4) # 将4位二进制转为整数 $decimalValue = 0 foreach ($bit in $binaryGroup.ToCharArray()) { $decimalValue = $decimalValue * 2 + [int]$bit } $hexResult += $hexMap[$decimalValue] } return $hexResult } # 测试调用 $binaryStr = "000010000000001111101000100010" Convert-BinaryToHex -BinaryString $binaryStr # 输出 0803E812
内容的提问来源于stack exchange,提问作者Nathan Comstock
相关产品推荐
相关产品推荐

