我目前在转换以下命令时遇到问题:
echo -ne '\x08\x80\01' | hexdump -C
截至目前,我有一个适用于大多数情况的命令(例如
\x08\x7F
有效)。看起来像这样:
$bytes = [byte[]]@(0x08, 0x80, 0x01)
$stdout = [Console]::OutputEncoding.GetString($bytes)
Format-Hex -InputObject $stdout
我简化了上面的命令。进行编码是没有意义的,因为我们只需执行
[byte[]]@(0x08, 0x80, 0x01) | Format-Hex
。这里的编码是由Powershell完成的,它来自外部命令(protoc)的执行。
hexdump
输出:
08 80 01
Format-Hex
输出:
08 EF BF BD 01
我认为这是一个编码问题,但我不知道如何解决它。
根据您的编辑历史记录,您希望将字节从本机命令通过管道传输到 PowerShell cmdlet (
native | ps
)。目前,这是不可能的。但您可以使用临时文件作为解决方法:
# Create a temporary file
$TempFile = New-TemporaryFile
# Write the bytes into the temporary file
Start-Process protoc -ArgumentList "--encode=Encoding ./encoding.proto" -RedirectStandardOutput $TempFile -Wait
# Print a hexdump of the bytes
Format-Hex -Path $TempFile
# (Optional) Remove the temporary file
Remove-Item $TempFile
仅供参考,使用 PowerShell 7.4,您可以 通过管道将字节从本机命令传输到另一个本机命令 (
native | native
)。