以下是样本:
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
答案 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)