HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 22.11.2015, 20:21
Recovery
Познающий
Регистрация: 19.03.2013
Сообщений: 65
С нами: 6920724

Репутация: 58
По умолчанию

Цитата:
Сообщение от legend2360  

BinaryReader - не означает, что файл будет читаться в двоичной системе счисления. Он будет читаться побайтово, а не по строкам(как обычно).

http://book.itep.ru/10/ascii.htm
49 - это ASCII код цифры(символа) "1".
Т.е, если я считаю побайтово символ, он мне вернет код этого символа, али что?
 
Ответить с цитированием

  #2  
Старый 23.11.2015, 19:54
NarutoUA
Постоянный
Регистрация: 26.05.2013
Сообщений: 692
С нами: 6822856

Репутация: 213


По умолчанию

Цитата:
Сообщение от Recovery  

Тогда, поясните другой момент. Когда я считываю из файла любые числа и преобразую их 'FBnew.ReadInt32(); '
FBnew - это BinaryReader, т.е двоичный файл. Если я ввиду в файл - "1234", он мне выдаст "12849". Почему так, можете пояснить? Спасибо.

ИЛИ (в файле все то же '1234')
если я вывожу FBnew.ReadByte() (считывает 1 байт и передвигает позицию в потоке на 1 байт вперед). Выдает 49, откуда он берет эти числа? Можете пояснить?

// думал, что 49 - код числа в символах (48 - 0, 49 - 1), оказалось, что ошибся.
49 это и есть код символа ('1'). Если ты хочешь считать число из файла, можешь считать строку и преобразовать ее в инт (Int32.Parse(string))

И еще, бинарные операции это операции между двумя операндами (например 5 + 10, тут операнды 5 и 10, есть еще унарные и тернарная операторы)

У тебя в файле текстовые данные (тоесть число 123456 представлено как последовательность 6 байт-букв), прочитать через ReadInt32, ReadInt16, ReadByte (можно, но сложно) у тебя не получится. Чтобы прочитать число через эти функции нужно их записать бинарно.
 
Ответить с цитированием

  #3  
Старый 24.11.2015, 01:45
Recovery
Познающий
Регистрация: 19.03.2013
Сообщений: 65
С нами: 6920724

Репутация: 58
По умолчанию

Уже не ожидал увидеть ответа, большое спасибо всем отзывчивым.

Еще один нюанс: в файле записано - "123456", при выводе стоит FBnew.ReadInt16(); т.е преобразует то что в файле в инт, и если по два байта то берет только "12", а выдает "12849". Откуда это число взялось? Я не пойму тогда, как же мне считать до конца число? Оно может состоять одно из десятки цифр, а я могу только считать только две, ну ладно четыре через ReadInt32. Не понятно. Считать по частям?С этим никогда не работал.

п.с мне нужно из двоичного файла считать все положительные, т.е в файле записано "0101001 101001". Выдать должен первое, я не пойму как это представляется в VS. То ли есть специальные операторы, которые сами это преобразуют, делать через строки, да, можно, но это достоаточно просто, тема состоит не в строках, а в работе с двоичными файлами, то бишь работать нужно через Binary или FileStream, сделаю так)

Попробую считывать побайтово, если первый равен 48, то записывай до пробела, если снова пробел, то проверяй 48(0) или 49(1))

Цитата:
Сообщение от NarutoUA  

записать бинарно.
Поподробнее можно?
 
Ответить с цитированием

  #4  
Старый 22.11.2015, 00:28
Woofing Giraffe
Постоянный
Регистрация: 14.06.2015
Сообщений: 402
С нами: 5744580

Репутация: 28
По умолчанию

Положительные? А тут есть отрицательные?
 
Ответить с цитированием

  #5  
Старый 22.11.2015, 23:09
itsLegend
Флудер
Регистрация: 23.03.2013
Сообщений: 2,696
С нами: 6915558

Репутация: 183


По умолчанию

Если в файле хранится следующий текст: Hello, world! , то считывание побайтово(по 1 байту) будут возвращаться значения: 72 101 108 108 111 44 32 119 111 114 108 100 33
 
Ответить с цитированием

  #6  
Старый 23.11.2015, 02:48
Recovery
Познающий
Регистрация: 19.03.2013
Сообщений: 65
С нами: 6920724

Репутация: 58
По умолчанию

Если ли сайт с подробно расписанной теорией по работе с бинарными операциями C#? (В гугле ничего адекватного не нашел)

Большое спасибо, legend2360. Есть еще пару 'недо'понимание,

Если я указал мол BinaryReader FBnew = new BinardyReader(File), где File - двоичный файл. Чем различаются такие понятия, как FBnew.ReadInt16 и FBnew.ReadUInt16. Сама VS трактует это так : ReadInt16 - считывает целое число со знаком длиной 2 байта и перемещает текущую позицию потока на два байта вперед, ReadUInt16 - считывает целое число без знака длиной 2 байта в формате прямого порядка из текущего потока и перемещает текущую позицию потока на два байта вперед и ReadString - строка предваряется значением длины строки, которое закодировано как целое число блоками по 7 битов. Можно ли перевести это на русский лад? Блоками по 7 битов, простите, это что?)

Не понятно, что за число со знаком и число без знака. Оно же целое, какой может быть знак? (Он же только у вещественных).

А если считывать в длину 2 байта, я так понимаю это просто 2 байта - 2 символа из файла, т.е если в файле - "12345". Он считает 1(49) и 2(50)? И если указатель смещается на 4 байта вперед, то грубо говоря, перепрыгивает через 4 символа вперед? Мне нужно считать из файла побайтово число. Т.е если я применю Int16, то считаются только первые две цифры? (А если оно состоит из 4 цифр, то Int32, как быть если я не знаю количество цифр?)

п.с могу заблуждаться, но чтобы считать сразу 2 байта и более, нужно создать массив?
  • Машины с порядком хранения от старшего к младшему (прямой порядок) хранят старший байт первым. Если посмотреть на набор байтов, то первый байт (младший адрес) считается старшим
Не особо понятно формулировка данных слов, возможно ли пояснить это по полкам?

Заранее спасибо.
 
Ответить с цитированием

  #7  
Старый 23.11.2015, 19:17
itsLegend
Флудер
Регистрация: 23.03.2013
Сообщений: 2,696
С нами: 6915558

Репутация: 183


По умолчанию

Int - integer - целое число(занимает 4 байта памяти), границы от ~ -2 млрд(~) до ~2 млрд.

Int16 - integer16(short или int16_t(что не могу подтвердить)) - целое число, но уже занимает 2 байта и имеет другие границы - меньше(-32 тыс. до 32 тыс.).

Приставка U(unsigned) обозначает, что число не может быть отрицательным и диапазон начинается от 0 до x*2+1(x - максимальный диапазон в "со знаком").

7 битов - это 0,875 байта, что по мною изученными типами данных не соответствует ни один(самый "менее потребляемый память" тип данных является bool / byte).

P.S. Было бы легче отвечать, если разделял вопросы по абзацам или нумеровал их.

Насчет разбиения чтения по 2 байтам и более ничего сказать не могу(как это будет возвращаться). Если прочитать 4 байта - в переменную занесутся эти 4 байта и указатель переместится так же на 4 байта.

Про машины(хранение младшего байта первым) могу объяснить(если я правильно понял) на HEX:

шестнадцатеричная система счисления(далее HEX) записывается так: 0xAAFF1230, т.е. 1 байт - 0xAA, 2 байт - 0xFF, 3 байт - 0x12, 4 байт - 0x30. В памяти они записываются наоборот: 0x3012FFAA.

Всё, что я здесь изъяснил, является опытом(он у меня не такой богатый) из клео(про побайтовое чтение). Это может не соответствовать действительности в C#.
 
Ответить с цитированием

  #8  
Старый 24.11.2015, 09:34
return
Участник форума
Регистрация: 23.10.2010
Сообщений: 125
С нами: 8186006

Репутация: 1
По умолчанию

как в собе сделать чекер стрима по скинам?

крч говоря, если в стриме появляется скин с id 123, то это напишет в чекер.
 
Ответить с цитированием

  #9  
Старый 24.11.2015, 13:13
SR_team
Флудер
Регистрация: 26.10.2013
Сообщений: 4,924
С нами: 6603505

Репутация: 183


По умолчанию

Цитата:
Сообщение от return  

как в собе сделать чекер стрима по скинам?
крч говоря, если в стриме появляется скин с id 123, то это напишет в чекер.
Обходишь пул игроков в стриме и сверяешь их id с 123, и при совпадение заносишь в чекер
 
Ответить с цитированием

  #10  
Старый 27.11.2015, 18:04
return
Участник форума
Регистрация: 23.10.2010
Сообщений: 125
С нами: 8186006

Репутация: 1
По умолчанию

дайте пожалуйста структуру stMiscInfo
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.