字符串在char 00H后停止追加

时间:2016-03-02 06:34:05

标签: c# string char hex

我正在做一些实验,作为探索过程的一部分,我正在尝试编写一个程序,以十六进制编辑器的方式呈现类似的文件。

我使用FileStream加载文件,然后将所有字节写入字节数组。然后我遍历数组并以十六进制格式将字节写成具有我选择宽度的块(在本例中为16字节)。

在每行的旁边,我想以ASCII格式写入字节,但是当我遇到00H时,之后的所有文本都没有附加到字符串中。

循环遍历字节的代码如下:

while (j < data.Length - 1)
{
    for (int i = 0; i <= blockWidth - 1; i++)
    {
        if (j < data.Length - 1)
        {
            byteBlock[i] = data[j];
            charBlock[i] = Convert.ToChar(data[j]); //ASCII Characters to be appended                       
            j += 1;
        }
    }
    sTemp = new string(charBlock);
    hex += BitConverter.ToString(byteBlock) + "      " + sTemp;//bug-causing line
    hex += Environment.NewLine;
}
textBox1.Text = hex;

textBox1中的文字只有以下一行:

D0-CF-11-E0-A1-B1-1A-E1-00-00-00-00-00-00-00-00        ÐÏࡱá

有16个字节的十六进制数据,只有8个ASCII字符(其中2个不在此页面上显示)。

我添加了一些断点并逐步完成代码,循环运行到最后没有任何问题。

当我将sTemp添加到hex的部分注释掉时,这样:

sTemp = new string(charBlock);//Output confirms the bug is not in this line
hex += BitConverter.ToString(byteBlock);// +"      " + sTemp;//bug-causing line
hex += Environment.NewLine;

我得到以下输出:

D0-CF-11-E0-A1-B1-1A-E1-00-00-00-00-00-00-00-00
00-00-00-00-00-00-00-00-3E-00-03-00-FE-FF-09-00
06-00-00-00-00-00-00-00-00-00-00-00-01-00-00-00
01-00-00-00-00-00-00-00-00-10-00-00-02-00-00-00
03-00-00-00-FE-FF-FF-FF-00-00-00-00-00-00-00-00
FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF-FF...

有人可以向我解释为什么会发生这种情况,还有我应该做些什么来解决这个问题?

1 个答案:

答案 0 :(得分:2)

  

在每行的旁边,我想以ASCII格式写入字节,但是当我遇到00H时,之后的所有文本都没有附加到字符串中。

是的 - 它只是没有显示在文本框中。 (您还使用ISO-8859-1,而不是ASCII .ASCII不包含任何重音字符等。)

大多数Windows窗体控件都是Win32控件上的非常薄的包装器,那些将U + 0000视为字符串的结尾。

在第二段代码中,使用十六进制将字节转换为文本,然后您可以看到数据

基本上,您不应该尝试显示非文本,就好像它的文字一样。如果你真的,真的想这样做,我只是使用

text = text.Replace('\u0000', ' ');

避免来自&#34;看到&#34;的Win32控制一个Unicode NUL字符并停止。