给定一个字符串,如0x33,0x32,0xff
,我想转换为一个字节数组,这样我就可以写入Registry属性的Reg_Binary类型。我有这个
$string = '0x33,0x32,0xff'
$array = $string -split ','
[byte[]]$hex = [byte[]]$array
$hex.GetType()
它在字符串有效时起作用,也在字符串是垃圾字符串(如0x33,0x32,0xzz
)时起作用。我真的希望[byte[]]$array
抛出一个异常,我想知道为什么它没有?还有,有没有一种优雅的方法来测试字符串或数组?或者我需要自己验证数组中的每一项,也许是用RegEx?我确实可以控制字符串的格式,但是考虑到Reg_Binary在RegEdit中的外观,我认为这种格式是一个不错的选择,很容易(希望)根据注册表中实际找到的内容创建,同时也使格式非常清楚地不是一个简单的字符串。但是如果有一个更好的解决方案来解决整个问题,那就是使用不同的字符串格式,我洗耳恭听。
编辑:有趣的是,我确实得到了一个[byte[]](0x33,0x32,0xzz)
的异常,所以问题似乎是当我转换字符串时,无论是否在括号中,它都不会抛出错误。我觉得这是一个“Powershell试图提供帮助,把一切都搞砸了”的时刻。
1条答案
按热度按时间wgx48brx1#
,
分隔的标记无法转换为[byte]
值,则代码确实会触发语句终止错误。$ErrorActionPreference = 'SilentlyContinue'
有效,或者有一个try
/catch
或trap
处理程序可以忽略错误。无论哪种方式,您都可以使用
try
/catch
语句来捕获错误,错误消息将指出不能强制转换为[byte]
的(第一个)令牌:输出: