Получение всего вывода строки, содержащей chr (0)

Вот образец:

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

Результат - в окне сообщения отображается «Привет» с заголовком 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.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
4 609
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

chr (0) имеет значение NULL. Вы после одного пробела chr (32) или просто набираете vblf или после Enter (Return) chr (13) или набираете vbcrlf

Просто для раздражения: chr (0) - NUL. NUL и null - это совершенно разные концепции, даже если они оба равны нулю.

James Curran 07.10.2008 19:06

Ха - ты узнаешь что-то новое каждый день. Спасибо за внимание!

Nick DeVore 07.10.2008 21:01

Действительно, Chr (0) используется для завершения строки, если вам нужен символ новой строки, вы можете использовать Environment.NewLine () в VB.NET или vbNewLine в VB6

Вы абсолютно правы, что Chr (0) рассматривается как управляющий символ, означающий «это конец этой строки». Как бы вы предпочли, чтобы этот персонаж был представлен? Пространство? Новая строка? Вам нужно только напечатать строку целиком или есть другие важные особенности строки?

Я бы просто позвонил TestString.Replace(chr(0), " ") или тому подобному в VB.NET

Я не думаю, что проблема связана со строкой vb, о чем свидетельствует ваш вывод длины. Я думаю, что это связано с функцией MsgBox, которая, вероятно, все еще использует API Windows, который рассматривает char (0) как терминатор.

Если ваша отладка или что-то в этом роде, и вы хотите представить, что есть char (0), вы должны заменить его печатным набором символов, который, как вы понимаете, представляет char (0).

Похоже, что VB правильно обрабатывает строку, потому что ему известна правильная длина (12), поэтому проблема только в том, когда вы отображаете строку. Можете ли вы заменить chr (0) пробелом, когда хотите его отобразить?

MsgBox чаще всего использует функцию Windows API Окно сообщения, которая использует строку с завершающим нулем и, таким образом, будет отображать только до первого нуля. Большинство окон api работает (если не все?) Со строкой с завершающим нулем, поэтому вам, возможно, придется найти другой способ отображения строки.

Ваши инструменты отладки (например, визуальная студия) также могут обрабатывать строки как завершенные нулем, который снова будет отображаться только до первого нуля (однако я не уверен в этом, и в настоящее время я не нахожусь на компьютере, на котором я могу протестировать его для vs08 ).

Ответ принят как подходящий

Образец кода в примере вопрошающего («SCORE» .ToString ...) у меня отлично работает в консольном приложении. Отладчик VS2005 не отображает строку правильно, но выводит на консоль нормально. Итак, у меня такое ощущение, что либо вы думаете, что это неверно, потому что отладчик ошибочно так говорит, либо ваша строка вывода недостаточно длинна, чтобы включать все отступы.

Взгляните на Статья Джона Скита в отношении строк. Похоже, что TestString будет содержать все символы, включая встроенный \ 0, но он не отображается правильно. В статье есть функция (на C#), которая правильно отображает строку.

Другие вопросы по теме