2010-05-02 2 views
4

Я поддерживаю некоторый Java-код, который я сейчас конвертирую в C#.Java char literal to C# char literal

код Java делает это:

sendString(somedata + '\000');

И в C# Я пытаюсь сделать то же самое:

sendString(somedata + '\000');

Но на VS2010 '\ 000' говорит мне что «Слишком много символов в буквальном буквале». Как я могу использовать '\ 000' в C#? Я попытался выяснить, что это за персонаж, но он, кажется, «или какой-то символ новой строки».

Вы знаете что-нибудь о проблеме?

Спасибо!

ответ

6

'\0' будет очень хорошо в C#.

Что происходит, так это то, что C# видит \0 и преобразует его в нуль-символ с ASCII значением 0; то он видит еще два 0 s, что является незаконным внутри символа (так как вы использовали одинарные кавычки, а не двойные кавычки). Nul-character обычно не печатается, поэтому он выглядел как пустая строка, когда вы пытались ее распечатать.

То, что вы набрали на Java, является символьным литералом, поддерживающим номер octal. C# не поддерживает восьмеричные литералы в номерах или, чтобы уменьшить ошибки программирования. *

C# does supports Unicode literals формы '\u0000', где 0000 представляет собой 1-4 значное шестнадцатеричное число.

* В PHP, например, если вы введете число с нулевым числом, которое является действительным восьмеричным числом, оно будет переведено. Если это не законное восьмеричное число, оно не будет переведено правильно. <? echo 017; echo ", "; echo 018; ?> выходы 15, 1 на моей машине.

+0

Хех ... мы писали практически то же самое. +1 –

+0

Спасибо вам обоим, кажется, работает просто отлично :) – Kristoffersen

4

Это null character, также известный как NUL. Вы можете записать его как '\ 0' в C#.

В C# строка «\ 000» представляет три символа: нулевой символ, за которым следуют две нулевые цифры. Поскольку литерал символа может содержать только один символ, вот почему вы получаете ошибку «Слишком много символов в символьном литерале».

+0

И мы оба по имени Mark ... так +1 вам тоже. –