我正在尝试在Powershell中将十六进制字符串转换为8位带符号整数数组。
我正在使用以下函数将十六进制字符串(例如A591BF86E5D7D9837EE7ACC569C4B59B)转换为字节数组,然后需要将其转换为8位带符号整数数组。
Function GetByteArray {
[cmdletbinding()]
param(
[parameter(Mandatory=$true)]
[String]
$HexString
)
$Bytes = [byte[]]::new($HexString.Length / 2)
For($i=0; $i -lt $HexString.Length; $i+=2){
$Bytes[$i/2] = [convert]::ToByte($HexString.Substring($i, 2), 16)
}
$Bytes
}
使用该函数后,十六进制将转换为字节数组,如下所示:
我需要将无符号字节数组转换为8bit有符号字节数组,如下所示:
这可能吗?如果可以,如何实施?
我尝试使用BitConverter类,但据我所知,它只能转换为int16。
提前致谢
要获取一个[byte[]]
数组([byte]
== System.Byte
,一个无符号的8位整数类型):
$hexStr = 'A591BF86E5D7D9837EE7ACC569C4B59B' # sample input
[byte[]] ($hexStr -split '(.{2})' -ne '' -replace '^', '0X')
-split '(.{2})'
用2个字符的序列分割输入字符串,并(...)
用括起来将这些序列包含在返回的令牌中;-ne ''
然后清除空令牌(从技术上讲是实际的数据令牌)。
-replace , '^', '0X'
0X
在每个结果2进制数字字符串之前放置前缀,产生数组'0XA5', '0X91', ...
转换结果以[byte[]]
直接有效地识别此十六进制格式。
为了得到一个[sbyte[]]
阵列([sbyte]
== System.SByte
,一个签名的8位整数),投直接到[sbyte[]]
代替; 千万不能尝试结合的石膏:)[sbyte[]] [byte[]] (...)
如果你给一个[byte[]]
数组,你再要转换[sbyte[]]
,使用下面的(有可能是更有效的方法):
[byte[]] $bytes = 0x41, 0xFF # sample input; decimal: 65, 255
# -> [sbyte] values of: 65, -1
[sbyte[]] $sBytes = ($bytes.ForEach('ToString', 'X') -replace '^', '0X')
应用于样本值,以十进制表示法:
# Input array of [byte]s.
[byte[]] $bytes = 43, 240, 82, 109, 185, 46, 111, 8, 164, 74, 164, 172
# Convert to an [sbyte] array.
[sbyte[]] $sBytes = ($bytes.ForEach('ToString', 'X') -replace '^', '0X')
$sBytes # Output (each signed byte prints on its own line, in decimal form).
输出:
43
-16
82
109
-71
46
111
8
-92
74
-92
-84
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句