2012-05-30 4 views
-2

Есть ли статический метод преобразования строки, int и т. Д. В массив байтов/байтов?Преобразование строки и т. Д. В байты и массивы байтов

Я уже знаю об этом методе:

public static byte[] FromString(string Input) 
    { 
     ASCIIEncoding ByteEncoder = new ASCIIEncoding(); 
     return ByteEncoder.GetBytes(Input); 
    } 

Но мне было интересно, если есть что-нибудь лучше. Было бы проблемой, если бы я сделал статический экземпляр кодировщика ASCII для использования?

Также - с точки зрения производительности - как метод преобразования ASCII выше сравнивается с выполнением его через цикл for или другие такие методы, которые являются многолинейными решениями?

Также - когда следует использовать ASCII против Unicode?

William

+1

Эти многочисленные вопросы каждый должен иметь свой собственный вопрос. –

+0

Вы не должны публиковать несколько вопросов. –

+0

Возможный дубликат [.NET String to byte Array C#] (http://stackoverflow.com/questions/472906/net-string-to-byte -array-c-sharp) –

ответ

4

Не существует статического метода. Существуют, однако, статические экземпляры Encoding.

System.Text.Encoding.ASCII.GetBytes().

С точки зрения производительности, вы должны доверять BCL. Это было написано тщательно, поэтому вы должны ожидать почти оптимальный код и, конечно, лучше справляться со всеми крайними случаями, о которых не всегда думают.

+0

Интересно, что класс отмечен как небезопасный для потоков, например, среди членов: http://msdn.microsoft.com/en-us/library/system.text.asciiencoding.aspx. d советовать создавать новые экземпляры в многопоточных сценариях только для того, чтобы быть в безопасности. –

+0

Было бы понятнее использовать «Encoding.ASCII» - нет необходимости использовать 'ASCIIEncoding.ASCII'. –

+0

@ChrisShain: Нет, они определенно потокобезопасны. Нет необходимости создавать новые экземпляры. В кодировке нет изменчивого состояния. Здесь * есть * в кодере/декодере, но это другое дело. –

1

Посмотрите на BitConverter. Он поддерживает целые числа и float. Также Encoding.UTF8 для строк.

BitConverter.GetBytes(4); // Int32 

System.Text.Enconding.UTF8.GetBytes("My string"); // String 

Возможно, вы хотите поддерживать unicode, даже если вы его не используете. Попробуйте UTF8 вместо ascii, чтобы вы могли поддерживать расширенные символы, если они вам нужны.

1

Ответы на основные вопросы, но чтобы ответить на окончательный вариант, используйте Unicode, если вам когда-либо понадобится поддержка неанглийских наборов символов и символов. Если вы используете английское подмножество глобальных символов, тогда придерживайтесь ASCII (хотя я предпочитаю UTF-8. Кроме того, это хорошая возможность поделиться мудростью Спольского. http://www.joelonsoftware.com/articles/Unicode.html -Очень хорошая статья.

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