连接两个字节数组并返回一个字节数组

Concat two byte arrays and get a byte array back

我想将字符串转换为带有 BOM 的 UTF8 字节数组,但这段代码生成的是对象数组而不是字节数组:

$input = "hello world"

$encoding = [system.Text.Encoding]::UTF8
$bytes = $encoding.GetBytes($input)
$bytesWithBom = $encoding.GetPreamble() + $bytes

$encoding.GetPreamble().GetType()
$bytes.GetType()
$bytesWithBom.GetType()

输出:

IsPublic IsSerial Name                                     BaseType                                                                                    
-------- -------- ----                                     --------                                                                                    
True     True     Byte[]                                   System.Array                                                                                
True     True     Byte[]                                   System.Array                                                                                
True     True     Object[]                                 System.Array  

所以+,给定两个字节数组,returns一个对象数组。如何连接并获得字节数组?

将结果 [Object[]] 转换为 [byte[]]:

$bytesWithBom = @($encoding.GetPreamble() + $bytes) -as [byte[]]

或者预先手动创建目标数组并将两个输入数组复制到其中:

$preamble = $encoding.GetPreamble()
$bytesWithBom = [byte[]]::new($bytes.Length + $preamble.Length)
$preamble.CopyTo($bytesWithBom, 0)
$bytes.CopyTo($bytesWithBom, $preamble.Length)