2015-10-28 3 views
0

Im пытается передать массив символов в байтовый массив.Преобразование char [] в байт [] приводит к увеличению числа

char[] cc = new char[] { ((char)(byte)210) }; // Count = 1 
byte[] b = System.Text.Encoding.UTF8.GetBytes(cc); // Count = 2 

Результаты преобразования в 2 записей для моего байт массива {195, 146}.
Я предполагаю, что проблема с кодировкой. Любая помощь приветствуется.


После столкнулись с некоторыми проблемами, которые я написал это 2 линии для целей тестирования, так что не возражает стиль.

Благодаря

+1

Это не проблема. Так UTF8 кодирует символы с кодовой точкой, равной или выше U + 0080. – PetSerAl

+1

вы просто хотите бросить? 'cc.Cast () .ToArray();' или 'cc.Select (c => (byte) c) .ToArray();' –

+0

Я не уверен, что понимаю вашу проблему. Почти никто не использует ASCII с тех пор, как, например, в 1980 году. В Unicode, который Java кодирует как UTF16, имеется более одного байта на символ. – scottb

ответ

0

Как сказал M.kazemAkhgary в вышеуказанных комментариях:

cc.Select(c=>(byte)c).ToArray(); 

Ключ был брошен вместо преобразования. Спасибо за это!

1

UTF-8 может использовать больше, чем один байт для хранения символа. Он использует только один байт для символов ASCII в диапазоне от 0 до 127, другим символам необходимо сохранить два или более байта.

Вы кодируете символ ASCII 210, который из расширенного символа ASCII (числовое значение> 127), UTF-8 использует два байта для хранения этого символа.

+0

Это по крайней мере имеет смысл для меня. Но я не могу преобразовать свой байтовый массив обратно таким образом. Я получаю совсем другой результат. Есть ли способ остаться в однобайтовых записях? – C4u

+0

M.kazemAkhgary получил это в верхних комментариях. – C4u

+0

Используйте однобайтную кодировку или используйте те символы, которые имеют однобайтовое представление для используемых вами символов. Конечно, это не будет обрабатывать все символы, но не может, поскольку один байт может охватывать только 256 значений, а не значения 1114112, которые необходимо покрыть всеми действительными кодами символов или даже только сотнями тысяч, которые используются. –

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