![]() |
массив байтов, C/c++
Я читаю данные из массива/буфера с байтами.
Сам массив начинается с цифр. Потом идёт или текст, или binary. В цифрах закодирована информация что именно содержит этот буфер/массив. У меня только адрес первой записи с которой я могу начать читать. Если вначале идёт uint, потом double, то массив содержит текст. А если вначале double, потом uint, то массив содержит binary. буфер с текстом ----------------------------------------------- заголовок | текст uint double | antichat... буфер с binary ----------------------------------------------- заголовок | данные double uint | 1010101 Как можно узнать, когда был прочитан uint и когда был прочитан double? (Я думал просто написать if(!(cin >> uint)) или использовать "|" оператор, но не уверен что это сработает. Вообще я с байтами не работал раньше.) Или, как вообще узнать, что содержит буфер: ASCII или binary? |
Уу...
Цитата:
Так же и тут, рассматривать буфер можно и как двоичный и как любой другой. А про cin>>uint это полный бред и естественно все неверно. |
По идее в uint первый (знаковый) бит должен быть единица, но я не уверен.
|
Никак.
|
Цитата:
Мне надо сделать заключение из заголовка. В том формате, с которым я имею дело, если буфер начинается с unsigned int то он содержит binary, а если с double, то он содержит ASCII. Весь вопрос в том, как узнать был прочитан unsigned int или double. Я думаю надо бит флаги использовать. |
Я нашёл функцию, которая показывает относиться ли байт к Ascii или нет. Если все байты в массиве Ascii, то и весь массив тоже Ascii (чем больше байтов, тем больше вероятность).
Этот заголовок в начале буфера только внимание отвлекал. |
Если я правильно понял, то у тебя есть адрес первого элемента в массиве/буфере. Тебе нужно узнать его тип. Тип будет известен только на стадии выполнения, так? В таком случае нужно использовать RTTI и оператор typeid. Вот элементарный пример использования:
Код:
#include <iostream> |
Forcer, а как, прости меня, можно определить является ли данная последовательность бит представлением uint'a или double'а? По-моему, никак, ибо размер памяти >> размера uint'a и double'а =) То есть, иначе говоря, задача изоморфна такой: "Дано число 101. Определить систему счисления." И как её решать? nerezus прав.
|
desTiny
ТС написал: Цитата:
|
Forcer,
Ну круто: тебе говорят число n. В памяти с адреса n записаны биты: 10001111011000100101101001010111000... И скажи тогда мне, что это - инт или дабл? :) |
| Время: 04:16 |