获取包含chr(0)的字符串的整个输出

时间:2008-10-07 14:36:56

标签: .net vb.net

以下是样本:

    Dim TestString As String = "Hello," & Chr(0) & "World"
    MsgBox(TestString, , "TestString.Length=" & TestString.Length.ToString)

结果 - Messagebox显示“Hello”,标题为TestString.Length = 12

我猜chr(0)被视为零终止字符串的结尾,但它不是我想要的。

使用Chr(0)操作的正确方法是什么?


我也在asp.net尝试了这个,但没有用。我正在通过套接字发送字符串。我的问题是,当我调试它时,整个字符串不会加起来。我需要为它们发送一个相当大的字符串。消息窗口上真正出现的内容并不会让我烦恼。我以上面的例子为例。我只需要将它正确添加的多个变量放到字符串中。另一个例子是

"SCORE".ToString.PadRight(8, chr(0)) & "3.0".ToString.PadRight(10, chr(0)) & "0".ToString.PadRight(1, "0")

预期值将得分为3.00

我得到的是得分3.0

9 个答案:

答案 0 :(得分:1)

你是绝对正确的,Chr(0)被视为一个控制字符,意思是“这是这个字符串的结尾。”你怎么会喜欢这个角色?空间?换行?你只需要完整地打印字符串,还是有关于字符串的其他重要内容?

我只需要调用TestString.Replace(chr(0), " ")或VB.NET中等效的内容

答案 1 :(得分:1)

我认为问题不在于你的长度输出所证明的vb字符串。我认为使用MsgBox函数可能仍然使用将ap(0)视为终止符的windows api。

如果您的调试或某些内容并且您希望表示存在char(0),则应将其替换为您理解的可打印字符集代表char(0)。

答案 2 :(得分:1)

MsgBox最喜欢使用Windows API函数MessageBox,它使用一个以空字符结尾的字符串,因此只显示第一个空值。大多数的windows api(如果不是全部?)都有空终止字符串,所以你可能需要找到一种不同的方式来显示字符串。

您的调试工具(例如visual studio)也可能会将字符串视为空终止,这也只会显示第一个空值(但是我不确定这个,并且我目前不在计算机上我可以测试它为vs08)。

答案 3 :(得分:1)

提问者示例中的示例代码(“SCORE”.ToString ...)在我的控制台应用程序中运行正常。 VS2005调试器没有正确显示字符串,但它输出到控制台就好了。所以,我的感觉要么你认为它是不正确的,因为调试器错误地说了这样,或者你的输出字符串不够长,不能包含所有的填充。

答案 4 :(得分:0)

chr(0)为空。您是在单个空格chr(32)之后还是只输入vblf或输入(返回)chr(13)或输入vbcrlf

答案 5 :(得分:0)

确实Chr(0)用于终止字符串,如果你想要一个换行符你可以在VB.NET中使用Environment.NewLine()或在VB6中使用vbNewLine

答案 6 :(得分:0)

似乎VB正在正确处理字符串,因为它知道正确的长度(12),所以问题就在于显示字符串时。当你想要显示时,你可以用空格替换chr(0)吗?

答案 7 :(得分:0)

关于字符串,请查看Jon Skeet's article。看起来TestString将包含所有字符,包括embeded \ 0,但它不显示correclty。本文包含一个正确显示字符串的函数(在c#中)。

答案 8 :(得分:0)

在过程声明中使用 MarshalAs 属性,返回包含 chr(0) 的字符串,如下所示

<DllImport("my.dll", ... )> _
Sub modifyStr(<MarshalAs(UnmanagedType.BStr)> ByRef stringContainingNullChars as String)