Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Чтение 2-х и 4-х байтных чисел из FileStream. Как реализовать?

2.2K
21 февраля 2003 года
jbn
14 / / 19.02.2003
Всем привет.
Встала задача: нужно из файла делать выборку двух и четырех байтных чисел (размещение в файле "Мл.байт, Ст.байт)и записывать их в переменную. Потом эту переменную писать в ячейку StringGrid в десятичном виде. Как реализовать сей алгоритм попроще и покороче?
Спасибо.:-?
2.0K
21 февраля 2003 года
SnakePAN
32 / / 21.10.2002
Цитата:
Originally posted by jbn
чУЕН РТЙЧЕФ.
чУФБМБ ЪБДБЮБ: ОХЦОП ЙЪ ЖБКМБ ДЕМБФШ ЧЩВПТЛХ ДЧХИ Й ЮЕФЩТЕИ ВБКФОЩИ ЮЙУЕМ (ТБЪНЕЭЕОЙЕ Ч ЖБКМЕ "нМ.ВБКФ, уФ.ВБКФ)Й ЪБРЙУЩЧБФШ ЙИ Ч РЕТЕНЕООХА. рПФПН ЬФХ РЕТЕНЕООХА РЙУБФШ Ч СЮЕКЛХ StringGrid Ч ДЕУСФЙЮОПН ЧЙДЕ. лБЛ ТЕБМЙЪПЧБФШ УЕК БМЗПТЙФН РПРТПЭЕ Й РПЛПТПЮЕ?
уРБУЙВП.:-?



б ОЕ РТПВПЧБМ ЙУРПМШЪПЧБФШ read(fdesc,buffer,size);?

ЮЙФБЕЫШ У ЕЕ РПНПЭША ЙЪ ЖБКМБ ОХЦОПЕ ЛПМ-ЧП ВБКФ - РПФПН РТЕПВТБЪПЧЩЧБЕЫШ Л ОХЦОПНХ ФЙРХ

2.0K
21 февраля 2003 года
SnakePAN
32 / / 21.10.2002
Цитата:
Originally posted by jbn
Всем привет.
Встала задача: нужно из файла делать выборку двух и четырех байтных чисел (размещение в файле "Мл.байт, Ст.байт)и записывать их в переменную. Потом эту переменную писать в ячейку StringGrid в десятичном виде. Как реализовать сей алгоритм попроще и покороче?
Спасибо.:-?



Извиняюсь за кодировку в прошлом ответе.
не пробовал использовать read(fdesc,buffer,size);?
Читаешь ей нужное кол-во бат, а потом преобразовываешь к нужному типу

2.2K
21 февраля 2003 года
jbn
14 / / 19.02.2003
Я делал так:
Читал файл в переменную:
MyFile = new TFileStream(...)
Устанавливал позицию чтения:
MyFile->Position = a
Читаю байт в переменную lo (младший байт)
FFR->Read(&b,1)
lo = b
Потом также читаем старший байт
А вот дальше проблема со системами счисления. Байты получаются dec, чтобы их просуммировать (типа hi(hex)*100(hex)+lo(hex)), нужно конвертировать в hex, а результат мне нужен в dec.
362
21 февраля 2003 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by jbn
Я делал так:
Читал файл в переменную:
MyFile = new TFileStream(...)
Устанавливал позицию чтения:
MyFile->Position = a
Читаю байт в переменную lo (младший байт)
FFR->Read(&b,1)
lo = b
Потом также читаем старший байт
А вот дальше проблема со системами счисления. Байты получаются dec, чтобы их просуммировать (типа hi(hex)*100(hex)+lo(hex)), нужно конвертировать в hex, а результат мне нужен в dec.



А чем по твоему отличается "байт в DEC" от "байта в HEX" :-)? Байт - он и в Африке байт, а DEC или HEX это лишь формат его записи. Ты хочешь HEX-редактор собрать? а чем куча уже готовых не подходит? И вообще - StringGrid для HEX-редактора слишком медленная штука (сам пробовал ;-))

2.2K
24 февраля 2003 года
jbn
14 / / 19.02.2003
Николай, спасибо за критику, эту проблему я уже решил. (ст.байт*256+мл.байт)-проще некуда, когда сделал, совестно стало за глупый, как оказалось вопрос. Просто в С++ я начал въезжать дней 10 назад, так что, если что, прошу не судить строго. А собрать я хочу не нех-редактор, а софтину, которая из файла выдергивает инфу и представляет ее в удобоваримом виде (тут своя специфика). Код для чтения я наваял, все ништяк, теперь нужно сделать обратное, залить содержимое StringGrid (измененное) в файл. Для этого я использовал String List (очень удобно, нет слов), беру ячейку Grid в переменную и Add ее в StringList. Но при этом в конец строки добавляется, естественно 0D 0A, что мне совсем не нужно. Как отрезать эту пару байт?
Заранее благодарен.
Юра.
362
25 февраля 2003 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by jbn
залить содержимое StringGrid (измененное) в файл. Для этого я использовал String List (очень удобно, нет слов), беру ячейку Grid в переменную и Add ее в StringList. Но при этом в конец строки добавляется, естественно 0D 0A, что мне совсем не нужно. Как отрезать эту пару байт?
Заранее благодарен.
Юра.



Не совсем понял, зачем тебе нужен StringList - залить содержимое обратно в файл можно например
так

_lopen(...) или _lcreate() - открываешь файл
здесь, еслт нужно доюавить код для смещения в файле - _llseek(....)
DWORD a - число и ячейки
for(int col = ...)//идем по ячейкам StringGrid
for(int row = ...)
{
sscanf(Grid->Cells[col][row].c_str(), "%ud", &a) - чтение ячейки в двойное слово
_lwrite(..., a) - запись двойного слова в файл
}

функции _lcreate, _llseek, _lwrite вообще то страрые еще из Win16 остались, но пока система их еще поддреживает. Новые функции это CreateFile, WriteFile и т.п. но там такая куча параметров, обычно мне их просто лень использовать ;-)

2.2K
26 февраля 2003 года
jbn
14 / / 19.02.2003
Николай, спасибо за подсказку.
Сделал сие через FileWrite, в принципе, оказывается все очень просто.
Юра.
P.S. Чем больше занимаюсь C++, тем больше он мне нравится. В свое время пытался заняться Делфи, небо и земля.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог