数组帮助在Powershell -正确的语法
本文关键字:语法 帮助 Powershell 数组 | 更新日期: 2023-09-27 17:51:21
我正在编写一个小测试脚本来正确验证一些数据。我有数据通过串口传递到我的程序,所有的数据都在十六进制字符串的。我的代码看起来很乱,但它可以工作。
我让这段代码工作了(尽管看起来很糟糕!),它最终显示了正确格式化的信息,但我有一种感觉,有一种更有效的方法来解析数据。
下面是我调用它的集群行-它将我的原始字符串放入数组,然后只使用属于数据的字节,(其他字节是对校验和/头和控制序列的响应),所以我剥离这些,然后从十六进制转换为十进制到ascii。也许这是一种更有效的方法?
$vin = $b[6,10,11,12,13,17,18,19,20,24,25,26,27,31,32,33,34] |
ForEach-Object { [Convert]::ToInt32($_,16) } |
ForEach-Object { [Convert]::ToChar($_) } |
ForEach-Object { Write-Host $_ -NoNewLine }
这是我从设备(示例消息)获得的原始数据:
49 02 01 00 00 00 4B 49 02 02 4C 31 54 44 49 02 03 35 32 36 33 49 02 0204 35 42 34 37 49 02 05 35 38 38 36
(流是5个7byte的消息,前3个字节是报头字节)
上面的代码将其转换为人类可读的字段:KL1TD52635B475886
我使用类似的数组来解析来自我的设备的响应消息,只是想确保我没有造成混乱!谢谢你!
我可以提供更多的代码,但我的问题是关于数组/解析的使用。
谢谢!
唯一看起来不对的是你似乎想要将结果字符串存储在变量($vin
)中,但Write-Host
只会在屏幕上输出它。
如果你打算重复使用它,你也可以把它变成一个函数:
function ConvertFrom-DeviceHexData {
param(
[Parameter(
Position=0,
Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)
]
[String]$inputString
)
$inputArray = $inputString.Split(" ")
$outputArray = $inputArray[6,10,11,12,13,17,18,19,20,24,25,26,27,31,32,33,34] |
ForEach-Object { [Convert]::ToInt32($_,16) } |
ForEach-Object { [Convert]::ToChar($_) } |
ForEach-Object { $_ }
$outputString = $outputArray -join ""
$outputString
}
"49 02 01 00 00 00 4B 49 02 02 4C 31 54 44 49 02 03 35 32 36 33 49 02 04 35 42 34 37 49 02 05 35 38 38 36" | ConvertFrom-DeviceHexData
返回KL1TD52635B475886
。
不能说太多关于看似"庞大"的语法和字符串操作,但你的代码看起来相当干净。