
22.11.2015, 20:21
|
|
Познающий
Регистрация: 19.03.2013
Сообщений: 65
С нами:
6920724
Репутация:
58
|
|
Сообщение от legend2360
BinaryReader - не означает, что файл будет читаться в двоичной системе счисления. Он будет читаться побайтово, а не по строкам(как обычно).
http://book.itep.ru/10/ascii.htm
49 - это ASCII код цифры(символа) "1".
Т.е, если я считаю побайтово символ, он мне вернет код этого символа, али что?
|
|
|

23.11.2015, 19:54
|
|
Постоянный
Регистрация: 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 (можно, но сложно) у тебя не получится. Чтобы прочитать число через эти функции нужно их записать бинарно.
|
|
|

24.11.2015, 01:45
|
|
Познающий
Регистрация: 19.03.2013
Сообщений: 65
С нами:
6920724
Репутация:
58
|
|
Уже не ожидал увидеть ответа, большое спасибо всем отзывчивым.
Еще один нюанс: в файле записано - "123456", при выводе стоит FBnew.ReadInt16(); т.е преобразует то что в файле в инт, и если по два байта то берет только "12", а выдает "12849". Откуда это число взялось? Я не пойму тогда, как же мне считать до конца число? Оно может состоять одно из десятки цифр, а я могу только считать только две, ну ладно четыре через ReadInt32. Не понятно. Считать по частям?С этим никогда не работал.
п.с мне нужно из двоичного файла считать все положительные, т.е в файле записано "0101001 101001". Выдать должен первое, я не пойму как это представляется в VS. То ли есть специальные операторы, которые сами это преобразуют, делать через строки, да, можно, но это достоаточно просто, тема состоит не в строках, а в работе с двоичными файлами, то бишь работать нужно через Binary или FileStream, сделаю так)
Попробую считывать побайтово, если первый равен 48, то записывай до пробела, если снова пробел, то проверяй 48(0) или 49(1))
Сообщение от NarutoUA
записать бинарно.
Поподробнее можно?
|
|
|

22.11.2015, 00:28
|
|
Постоянный
Регистрация: 14.06.2015
Сообщений: 402
С нами:
5744580
Репутация:
28
|
|
Положительные? А тут есть отрицательные?
|
|
|

22.11.2015, 23:09
|
|
Флудер
Регистрация: 23.03.2013
Сообщений: 2,696
С нами:
6915558
Репутация:
183
|
|
Если в файле хранится следующий текст: Hello, world! , то считывание побайтово(по 1 байту) будут возвращаться значения: 72 101 108 108 111 44 32 119 111 114 108 100 33
|
|
|

23.11.2015, 02:48
|
|
Познающий
Регистрация: 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 байта и более, нужно создать массив?
- Машины с порядком хранения от старшего к младшему (прямой порядок) хранят старший байт первым. Если посмотреть на набор байтов, то первый байт (младший адрес) считается старшим
Не особо понятно формулировка данных слов, возможно ли пояснить это по полкам?
Заранее спасибо.
|
|
|

23.11.2015, 19:17
|
|
Флудер
Регистрация: 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#.
|
|
|

24.11.2015, 09:34
|
|
Участник форума
Регистрация: 23.10.2010
Сообщений: 125
С нами:
8186006
Репутация:
1
|
|
как в собе сделать чекер стрима по скинам?
крч говоря, если в стриме появляется скин с id 123, то это напишет в чекер.
|
|
|

24.11.2015, 13:13
|
|
Флудер
Регистрация: 26.10.2013
Сообщений: 4,924
С нами:
6603505
Репутация:
183
|
|
Сообщение от return
как в собе сделать чекер стрима по скинам?
крч говоря, если в стриме появляется скин с id 123, то это напишет в чекер.
Обходишь пул игроков в стриме и сверяешь их id с 123, и при совпадение заносишь в чекер
|
|
|

27.11.2015, 18:04
|
|
Участник форума
Регистрация: 23.10.2010
Сообщений: 125
С нами:
8186006
Репутация:
1
|
|
дайте пожалуйста структуру stMiscInfo
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|