C# 无法在c中的文本框上正确显示内容字节[]#

C# 无法在c中的文本框上正确显示内容字节[]#,c#,visual-studio-2010,C#,Visual Studio 2010,我试图在文本框中显示字节[], 首先,我将所有加密信息从文件temp.enc读取到字节数组 FileStream f = File.OpenRead("temp.enc"); byte[] b = new byte[f.Length];//length is 32 bytes f.Read(b, 0, Convert.ToInt32(f.Length)); f.Close(); 其次,我尝试在文本框中显示内容,当我运行程序时,我看不到完整的数据。它只显示前23个字节的数据 outputFile

我试图在文本框中显示字节[], 首先,我将所有加密信息从文件temp.enc读取到字节数组

FileStream f = File.OpenRead("temp.enc");
byte[] b = new byte[f.Length];//length is 32 bytes
f.Read(b, 0, Convert.ToInt32(f.Length));
f.Close();
其次,我尝试在文本框中显示内容,当我运行程序时,我看不到完整的数据。它只显示前23个字节的数据

outputFileTextBox.Text = System.Text.Encoding.Default.GetString(b);
然而,如果我再次使用相同的字节数组将信息写回文件,我会将所有32字节写入文件

BinaryWriter swEnc = new BinaryWriter(File.OpenWrite("encypt.txt"));
swEnc.Write(b);
swEnc.Close();

这是一个c#windows应用程序,我不确定我做错了什么

确保您的读写格式相同。看起来您正在使用默认编码以文本形式读入,但您以二进制格式将其写回

下面是一个示例代码,它以与读入时相同的格式写回:

    private string ReadFile(string filename)
    {
        var sb = new StringBuilder();
        if (System.IO.File.Exists(filename))
        {
            using (var f = System.IO.File.OpenRead(filename))
            {
                var b = new byte[f.Length];
                var len = f.Read(b, 0, b.Length);
                while ((-1 < len) && (len == b.Length))
                {
                    sb.Append(System.Text.Encoding.UTF8.GetString(b, 0, len));
                    len = f.Read(b, 0, b.Length);
                }
            }
        }
        return sb.ToString();
    }

    private void WriteFile(string filename, string data)
    {
        using (var f = System.IO.File.OpenWrite(filename))
        {
            var b = System.Text.Encoding.UTF8.GetBytes(data);
            f.Write(b, 0, b.Length);
        }
    }
私有字符串读取文件(字符串文件名)
{
var sb=新的StringBuilder();
if(System.IO.File.Exists(filename))
{
使用(var f=System.IO.File.OpenRead(文件名))
{
var b=新字节[f.Length];
var len=f.Read(b,0,b.Length);
而(-1
此外,一些文本字符可能是非打印值(回车、字段开始、字段结束等)

考虑以下ASCII图表中十进制32值以下的所有不可显示值:


是否要将
Int32
值的十进制/十六进制/二进制/etc表示形式或值显示为
字符串
System.Text.Encoding.Default.GetString(b)
没有任何意义,因为您没有
string
(尚未?)。byte[]b具有来自AES256方案的加密数据。temp.enc data i}ÊÀ§DÕi“E5'cÙ¸,…ñÛŒòÿiöJ'J,当我将其读入byte[]时,它会自动转换为dec。我希望在temp.ency中显示它。如果您有任意字节,并且希望生成可打印的内容,您需要使用Base 64或bin转换为十六进制。当从编码中生成字节时,应仅使用
编码.GetBytes
。加密数据(或通常为字节数组)不一定可以转换为
字符串。您碰巧看到23个字节,因为这是默认编码器可以显示为
字符串的内容。对于另一个编码数据,您将看到不同数量的字符。您需要的是将字节数组转换为
字符串
,例如..明白了。我试图按原样显示,以便用户可以直接复制enc数据。