Переввести в 16-ричный вид | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Есть небольшой файл ttt.txt следующего содержимого:
В 16-ричном виде это выглядит как: [attachment 25858 s1.png] Как на C# преобразовать текст файла в 16-ричный вид? |
Re: Переввести в 16-ричный вид | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Попробовал так:
В итоге вижу: [attachment 25859 s2.png] |
Re: Переввести в 16-ричный вид | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Подозреваю (возможно и не прав), что проблема в:
Господа, помогите! |
Re: Переввести в 16-ричный вид | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Попытался сделать через byte - не получилось:
|
Re: Переввести в 16-ричный вид | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Ура, получилось.
|
Re: Переввести в 16-ричный вид | |
---|---|
ssa Сообщений: 13007 Откуда: Москва Дата регистрации: 23.03.2005 |
М-да... Перевод чисел из одной системы счисления в другую вроде как всегда был чуть ли не первым домашним заданием начинающим программистам...
------------------ Лень - это неосознанная мудрость. |
Re: Переввести в 16-ричный вид | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
В C# строки (и символы, которые char) юникодные. Если в файле текст в нужной кодировке (в той, hex коды символов которой и нужно получать) то нужно банально НЕ читать его в "строку" - в "байты" и читай сразу - а их уж, если надо, и переводи в hex символы (опять же вопрос - ну на консоль, понятно - там "напечатало и напечатало", а если это нужно в какой файл кидать - то в какой кодировке? )
------------------ WBR, Igor |
Re: Переввести в 16-ричный вид | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Вы предлагаете использовать BinaryReader? |
Re: Переввести в 16-ричный вид | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Проверил:
Так то же работает! Спасибо. |
Re: Переввести в 16-ричный вид | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Анализ разных вариантов и выбор наиболее быстрого. В части конвертации byte[] в string содержащий hex-значения этих байт, и обратно.
stackoverflow.com ------------------ WBR, Igor |
Re: Переввести в 16-ричный вид | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Честно говоря, не понял мысли. По ссылке первый же пример:
очень похоже на PrintHexBytes. |
Re: Переввести в 16-ричный вид | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Третий пост - Performance Analysis.
Здоровенный список различных вариантов и их сравнительная скорость. Твой начальный вариант, я полагаю, будет ЕЩЁ медленнее, т.к. ты не задаёшь размер буфера для StringBuilder, а это будет приводить к его ресайзам. Но и ближайший аналог с foreach и StringBuilder.AppendFormat в тесте занимает предпоследнее место - он всего в 1.1 раза быстрее самого медленного из протестированных вариантов. Тогда как лидер в 100 раз быстрее (но там unsafe код используется) а "почётное второе место" (та же идея но без unsafe кода) в 43-45 раз быстрее. Вот в этом, собственно говоря, и была мысль ------------------ WBR, Igor |
Re: Переввести в 16-ричный вид | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Вот код - читаю побайтно сразу в нужной кодировке. Ни каких дополнительных массивов и ни каких дополнительных перекодировок.
Исправлено 1 раз(а). Последнее : S-type, 18.09.16 22:41 |
Re: Переввести в 16-ричный вид | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Неужели, если в предыдущем примере
заменить на
станет работать быстрее? |
Re: Переввести в 16-ричный вид | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Предположим, есть такой код:
Да, если его заменить на:
или на:
результат будет тот же. Возможно, и скорость будет выше. Но, стоит ли так делать? |
Re: Переввести в 16-ричный вид | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Каждый сам для себя решает - хорошие он пишет программы или посредственные, заботится он о пользователях с ограниченными ресурсами, или "у меня на 8-ми ядерном проце с 64Гб оперативы и 3-мя наисвежайшими видюхами за полштуки каждая всё летает" и на офисных нищебродов можно забить
Опять же - одно дело задача исполняющаяся раз в год, и объём обрабатываемых данных "пять строк" - где разница будет между 100 микросекунд и 1 микросекунда, и реально массивная задача и оптимизация позволит обойтись минутами вместо десятков часов. Это всё касается совершенно любой среды и языка, конечно же. ------------------ WBR, Igor |
Re: Переввести в 16-ричный вид | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Однозначно! Спасибо за помощь. |
Re: Переввести в 16-ричный вид | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Главное что - главное ЗНАТЬ
В этом конкретном случае - про наличие альтернативных вариантов существенно ускоряющих работу. Если потребуется - сможешь хорошо всё ускорить. Даже если изначально выбрал просто "самый читаемый" вариант ------------------ WBR, Igor |
Re: Переввести в 16-ричный вид | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Глядя на:
Такая вот мысль посетила - можно немного сократить код:
|
Re: Переввести в 16-ричный вид | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Можно - но за счёт этого он станет в 1.5-2 раза медленнее работать на больших файлах
А вообще для произвольных файлов гораздо лучше заниматься их трансформацией по частям, а не гнать целиком в память... Т.е. считал, к примеру, 1Мб данных, "перекодировал", записал в выходной файл и читай следующую порцию. Или же вообще поставить в промежуток цепочки потоков BufferedStream и читать/писать по одному символу за раз Но это я не проверял - может оказаться и весьма неэффективным вариантом. ------------------ WBR, Igor |
© 2000-2024 Fox Club  |