BigEndian\LittleEndian
От: snaphold  
Дата: 28.11.14 07:31
Оценка: :))) :))
Хочу понять BigEndian\LittleEndian.

Сделал пример. Ожидаю в text1 увидеть перевернутую строку, но этого не происходит.
Что я не так делаю?
Хочу получить перевернутую строку.

static void Main(string[] args)
{
var filePath = "Test.txt";
String s = "This is test";

var str = Encoding.BigEndianUnicode.GetBytes(s);
File.WriteAllBytes(filePath, str);

var text1 = File.ReadAllText(filePath, Encoding.ASCII);
Console.ReadKey();
}

Re: BigEndian\LittleEndian
От: Jack128  
Дата: 28.11.14 07:52
Оценка:
Здравствуйте, snaphold, Вы писали:

S>Хочу понять BigEndian\LittleEndian.


S>Сделал пример. Ожидаю в text1 увидеть перевернутую строку, но этого не происходит.

S>Что я не так делаю?
S>Хочу получить перевернутую строку.

А что нить типа var s = new string("text".Reverse().ToArray()); — уже не модно ??

А так, в юникоде символ два байта занимает, а в ASCII — один. Как ты подобным преобразованием перевернутую строку хотел получить — не понятно.
Отредактировано 28.11.2014 7:53 Jack128 . Предыдущая версия .
Re: BigEndian\LittleEndian
От: Sinix  
Дата: 28.11.14 08:04
Оценка:
Здравствуйте, snaphold, Вы писали:

S>Что я не так делаю?

Всё

Вы записываете текст в файл в одной кодировке, читаете — в другой. На выходе будет мусор (в вашем случае — символы вперебивку с '\0'). С весьма забавными эффектами.

S>Хочу получить перевернутую строку.

Простой и неправильный способ: string.Concat("Hello".Reverse()).

Если в строке будут surrogate pairs — снова получите мусор. С не менее забавными эффектами. Более-менее правильное решение можно глянуть тут.
Re[2]: BigEndian\LittleEndian
От: snaphold  
Дата: 28.11.14 08:06
Оценка:
Здравствуйте, Jack128, Вы писали:

J>Здравствуйте, snaphold, Вы писали:


S>>Хочу понять BigEndian\LittleEndian.


S>>Сделал пример. Ожидаю в text1 увидеть перевернутую строку, но этого не происходит.

S>>Что я не так делаю?
S>>Хочу получить перевернутую строку.

J>А что нить типа var s = new string("text".Reverse().ToArray()); — уже не модно ??


хочу испытать BigEndian\LittleEndian именно, т.е. записал в одном порядке, а потом считал в другом

J>А так, в юникоде символ два байта занимает, а в ASCII — один. Как ты подобным преобразованием перевернутую строку хотел получить — не понятно.


как провести тест с записью в одной кодировке (BigEndian) и считыванием в другой, чтобы получить обратный порядок считывания?
Re[3]: BigEndian\LittleEndian
От: Sinix  
Дата: 28.11.14 08:13
Оценка:
Здравствуйте, snaphold, Вы писали:

S>хочу испытать BigEndian\LittleEndian именно, т.е. записал в одном порядке, а потом считал в другом

S>как провести тест с записью в одной кодировке (BigEndian) и считыванием в другой, чтобы получить обратный порядок считывания?
Никак. Читай про разницу B/L endian.

UPD. И ещё ссылка на ту же тему.
Отредактировано 28.11.2014 8:15 Sinix . Предыдущая версия .
Re: BigEndian\LittleEndian
От: Lexey Россия  
Дата: 28.11.14 08:23
Оценка: +1
Здравствуйте, snaphold, Вы писали:

S>Хочу понять BigEndian\LittleEndian.


S>Сделал пример. Ожидаю в text1 увидеть перевернутую строку, но этого не происходит.


А с какого перепуга она должна стать перевернутой? Endianess влияет только на порядок байтов символа, но не на порядок самих символов. То есть, юникодный символ 'A' будет представлен либо как 0x41 0x00, либо как 0x00 0x41
В MSDNе есть неплохой пример на представление строк в разных кодировках

S> var text1 = File.ReadAllText(filePath, Encoding.ASCII);

Результат этого действия будет странным — получится строка с кучей нулевых символов внутри.
"Будь достоин победы" (c) 8th Wizard's rule.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.