c# write bytes to stdout向输出添加随机字节



我在。net 6项目中有以下代码:

using var stdout = Console.OpenStandardOutput();
stdout.Write(BitConverter.GetBytes((uint) 8));
stdout.Flush();

我从PowerShell运行像这样的./program.exe > ./output。我期望输出是一个包含4字节的文件,具有以下十六进制值:08 00 00 00。然而,输出实际上包含14字节:FF FE 08 00 00 00 00 00 00 00 0D 00 0A 00.

我理解前2个字节是UTF16LE(维基百科)的BOM。最后4个字节是rn(CRLF)。中间的字节是我写的,我相信是用UTF16LE编码的。

我不明白为什么要加这么多额外的信息。如果我直接写到stdout,为什么框架不假设我做了所有必要的编码,我写的正是我想写的字节。为什么它要添加这些额外的信息,我怎样才能阻止它这样做?我在用头撞墙。

<标题>上下文h1> 不能允许任何额外的字节写入,因为我正在使用Chrome Native Messaging,它期望前4个字节是消息的长度,然后是消息本身。它使用stdout/stdin在主机应用程序(c#应用程序在我的情况下)和扩展之间读/写。如果我可以写到另一个流,我马上就会写,但是我不能。

这一切都是因为PowerShell。代码按预期工作并输出正确的字节,但PowerShell正在获取这些字节并将其编码为UTF16LE。

cmd.exe中运行Program.exe > output会产生预期的结果。

谢谢你一千次@dmedine,我的头撞在墙上,但我只是在错误的环境中测试。

相关内容

  • 没有找到相关文章

最新更新