我想从二进制字符串创建一个二进制 blob,就像使用 .NET 文件流从文件中将二进制 blob 读入缓冲区一样。然后我想从 blob 中的特定偏移量读取 2 个字节。
我创建一个这样的文件:
echo "AAAABBBB" > .\zzblob.txt
$bytes = "AAAABBBB`r`n"
$aa = [system.bitconverter]::touint16($bytes, 0)
# FAIL!
# Checking the type:
$bytes.GetType() | select Name, BaseType | ft -HideTableHeaders
# String System.Object
现在,使用流缓冲区执行相同的操作,我们得到了其他东西。
$fp = ".\zzblob.txt"
$bf = (new-object byte[](256))
$sp = New-Object System.IO.FileStream($fp, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read)
$sp.Length
$sp.Read($bf, 0, 256)
$sp.close()
$aa = [system.bitconverter]::touint16($bf, 2) # ..AA
d2h $aa
# 0x4141 ## OK!
# Checking type:
$bf.GetType() | select Name, BaseType | ft -HideTableHeaders
# Byte[] System.Array
如何将字符串从
String System.Object
转换为 Byte[] System.Array
?
看来我在发布这篇文章后就找到了答案。
$bytes = "AAAABBBB`r`n"
$byt = ([System.Text.Encoding]::UTF8).GetBytes($bytes)
$byt.GetType() | select Name, BaseType | ft -HideTableHeaders
# Byte[] System.Array
$bb = [system.bitconverter]::touint16($byt, 4)
d2h $bb
# 0x4242 ## OK!