gpt4 book ai didi

arrays - 是否可以在 Powershell 中将字节数组转换为 8 位有符号整数数组?

转载 作者:行者123 更新时间:2023-12-03 00:32:01 26 4
gpt4 key购买 nike

我正在尝试在 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
}

使用该函数后,十六进制被转换为字节数组,如下所示:

unsigned byte array

我需要获取无符号字节数组并将 o 转换为 8 位有符号字节数组,如下所示:

signed 8-bit integer array (byte array)

这可能吗?如果可以,如何实现?

我试过使用 BitConverter 类,但据我所知,它只能转换为 int16。

提前致谢

最佳答案

获取[byte[]]数组([byte] == System.Byte无符号 em> 8位整型):

$hexStr = 'A591BF86E5D7D9837EE7ACC569C4B59B' # sample input

[byte[]] -split ($hexStr -replace '..', '0x$& ')
  • -replace , '..', '0x& ' 在每对 (..) 的十六进制数字之前插入 0x然后插入一个空格,产生字符串 '0xA5 0x91 ... '

  • 应用于生成的字符串的
  • -split 将字符串按空格拆分为单个字节表示形式('0xA5'、'0x91')的数组 , ...)

  • 将结果转换为 [byte[]] 有助于直接识别这种十六进制格式。

    • 注意:如果您忘记了转换,您将得到一个字符串数组。
  • 获取[sbyte[]]数组([sbyte] == System.SByte有符号 8 位整数),直接转换为[sbyte[]];不要尝试组合转换:[sbyte[]] [byte[]] (...))

更简单的 PowerShell(核心)7.1+ 替代方案,使用 .NET 5+ [System.Convert]::FromHexString()方法:

$hexStr = 'A591BF86E5D7D9837EE7ACC569C4B59B' # sample input

# Directly returns a [byte[]] array.
# Cast to [sbyte[]] if you need [sbyte] instances.
[System.Convert]::FromHexString($hexStr)

如果您一个[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

关于arrays - 是否可以在 Powershell 中将字节数组转换为 8 位有符号整数数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60065244/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com