Чтение 2-х и 4-х байтных чисел из FileStream. Как реализовать?
Встала задача: нужно из файла делать выборку двух и четырех байтных чисел (размещение в файле "Мл.байт, Ст.байт)и записывать их в переменную. Потом эту переменную писать в ячейку StringGrid в десятичном виде. Как реализовать сей алгоритм попроще и покороче?
Спасибо.:-?
чУЕН РТЙЧЕФ.
чУФБМБ ЪБДБЮБ: ОХЦОП ЙЪ ЖБКМБ ДЕМБФШ ЧЩВПТЛХ ДЧХИ Й ЮЕФЩТЕИ ВБКФОЩИ ЮЙУЕМ (ТБЪНЕЭЕОЙЕ Ч ЖБКМЕ "нМ.ВБКФ, уФ.ВБКФ)Й ЪБРЙУЩЧБФШ ЙИ Ч РЕТЕНЕООХА. рПФПН ЬФХ РЕТЕНЕООХА РЙУБФШ Ч СЮЕКЛХ StringGrid Ч ДЕУСФЙЮОПН ЧЙДЕ. лБЛ ТЕБМЙЪПЧБФШ УЕК БМЗПТЙФН РПРТПЭЕ Й РПЛПТПЮЕ?
уРБУЙВП.:-?
б ОЕ РТПВПЧБМ ЙУРПМШЪПЧБФШ read(fdesc,buffer,size);?
ЮЙФБЕЫШ У ЕЕ РПНПЭША ЙЪ ЖБКМБ ОХЦОПЕ ЛПМ-ЧП ВБКФ - РПФПН РТЕПВТБЪПЧЩЧБЕЫШ Л ОХЦОПНХ ФЙРХ
Всем привет.
Встала задача: нужно из файла делать выборку двух и четырех байтных чисел (размещение в файле "Мл.байт, Ст.байт)и записывать их в переменную. Потом эту переменную писать в ячейку StringGrid в десятичном виде. Как реализовать сей алгоритм попроще и покороче?
Спасибо.:-?
Извиняюсь за кодировку в прошлом ответе.
не пробовал использовать read(fdesc,buffer,size);?
Читаешь ей нужное кол-во бат, а потом преобразовываешь к нужному типу
Читал файл в переменную:
MyFile = new TFileStream(...)
Устанавливал позицию чтения:
MyFile->Position = a
Читаю байт в переменную lo (младший байт)
FFR->Read(&b,1)
lo = b
Потом также читаем старший байт
А вот дальше проблема со системами счисления. Байты получаются dec, чтобы их просуммировать (типа hi(hex)*100(hex)+lo(hex)), нужно конвертировать в hex, а результат мне нужен в dec.
Я делал так:
Читал файл в переменную:
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-редактора слишком медленная штука (сам пробовал ;-))
Заранее благодарен.
Юра.
залить содержимое 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 и т.п. но там такая куча параметров, обычно мне их просто лень использовать ;-)
Сделал сие через FileWrite, в принципе, оказывается все очень просто.
Юра.
P.S. Чем больше занимаюсь C++, тем больше он мне нравится. В свое время пытался заняться Делфи, небо и земля.