我有一个byte[]
数组,想把它写到stdout:Console.Out.Write(arr2str(arr))
。如何将byte[]
转换为字符串,以便app.exe > arr.txt
执行预期的操作?我只想使用管道将数组保存到文件中,但编码会搞砸。
我后来想从stdin中读取该字节数组:app.exe < arr.txt
并得到同样的东西。
我怎样才能做这两件事:向/从stdin / stdout写入和读取字节数组?
编辑:
我正在阅读string s = Console.In.ReadToEnd()
,然后是System.Text.Encoding.Default.GetBytes(s)
。我正在使用System.Text.Encoding.Default.GetString(bytes)
从数组转换为字符串,但与<
,>
一起使用时,这不起作用。通过“不起作用”我的意思是通过管道写入和读取不会返回相同的东西。
答案 0 :(得分:3)
如果您要写入Console.WriteLine,则需要将文本编码为可打印格式。如果您想以二进制形式输出文件, 不能 使用Console.WriteLine
如果您仍需要输出到控制台,则需要使用Console.OpenStandardOutput()打开原始流,或者调用Convert.ToBase64String将字节数组转换为字符串。还有Convert.FromBase64String从base64返回到字节数组。
答案 1 :(得分:3)
要使用二进制文件,您希望Console.OpenStandardInput()检索您可以读取的Stream。这已在SO的其他主题中介绍过,例如:Read binary data from Console.In