2010-01-06 2 views
6

Как хранить символ ASCII в литерале «char»?Как назначить символ, используя данные ASCII?

ASCII-символов я хочу использовать мой специальный символ является символом разделителя файла:

Decimal: 028
восьмиштырьковый: 034
Hex: 01C
Binary: 00011100

// This works in C/C++, but not C#: 
static const char FS = 0x1C; // File Separator 
+1

Примечание: нет такой вещи, как неуправляемый C#. – ChaosPandion

+0

Хаос: Да, есть: http://msdn.microsoft.com/en-us/library/aa288474%28VS.71%29.aspx –

+2

Он по-прежнему управляется. Вы можете просто делать небезопасные вещи. – ChaosPandion

ответ

5

Я бы предположил, что '\u001C' будет работать.

+0

Изменено это на мой ответ сегодня, потому что я вижу, что это версия, которую я действительно использую. Спасибо, Марк. BTW: Копайте праздничный Аватар. Кажется, я не могу заставить моего Граватара измениться. Каждый раз, когда я пробовал в прошлом, мой Avatar возвращается таким образом, что некоторый SO Assigned generic. – jp2code

13

Статический модификатор не нужен, и вы должны явно передать int в char.

const char FS = (char)0x1C; 
+0

Спасибо. Я думаю, это было так просто, я даже не думал о актерском составе. – jp2code

2

const char FS = '\ x1C';

+4

escape-последовательность '\ x' - это чистое зло - по крайней мере для строк. Например, различие между «\ x9Bad Compiler» и «\ x9Good компилятором» довольно сложно определить. Не так уж плохо для одного символа, хотя, я думаю. Тем не менее я все равно использую '\ u001c'. –

+0

ChaosPandion получил это первым. Я попытался использовать '\ 1C', но это не сработало. Благодаря! – jp2code

+0

@Jon Skeet: Но вы можете так же легко использовать '\ x' с четырьмя цифрами, как вы можете' \ u' с четырьмя цифрами. Например, '' \ x0009Bad Compiler "' будет компилироваться так же, как '' \ u0009Bad Compiler''. И '\ x' более удобен для литералов' char', так как у вас нет * *, чтобы использовать все четыре цифры. Для строк это может быть сложно, если вы не будете осторожны, как вы указываете. Но если нет никакой двусмысленности (скажем, после последовательности нет буквенно-цифровых символов), то я по-прежнему предпочитаю '\ x'. Кстати, я категорически возражаю против использования слова ** зла ** для обозначения «сложной или опасной конструкции». –

0

Будьте осторожны с кодировками, если вы собираетесь писать это в поток; Символы и строки .NET кодируются в кодировке UTF-16, поэтому они будут записаны как 001C (или 1C00, в зависимости от сущности, я не помню). Вы можете избежать этой проблемы, указав подходящую кодировку при открытии потока.

Редактировать: Собственно, это не тот случай! Просто протестировав его, поведение по умолчанию для StreamWriter и др. Должно использовать текущую кодовую страницу ANSI системы (обычно ISO-8859-1), поэтому она фактически записывается в ожидаемом 8-битном формате. Это, конечно же, даст неожиданные результаты для символов, отличных от ANSI.

+0

@ Инквизитор: предложит ли Джон Скит и Марк Гравелл использовать '\ u001C', чтобы предотвратить проскальзывание потоков UTF-16? – jp2code

+0

@ jp2code: Я был на самом деле неправ, так что неважно :) Однако нет, способ, которым назначается персонаж, не повлияет на то, как он записывается в потоки. –

Смежные вопросы