вот эта прога извлекает побайтово, т.е. ансигнед чар и пишет в
строку, соответственно, а оказалось что в файле старший и младший байт, т.е. 16 бит данные.
/*read*/
FILE * fp;
int l = 2895360;
int k = 1447680;
unsigned short bbb[l];
unsigned short * pix;
pix=malloc(l*sizeof(*pix));
fp = fopen ("1113721721.raw", "r");
int n=0; int c =0;
while (n < l) {
if (n%2==0){
bbb[n] = getc (fp);
pix[с]=bbb[n];
c++;
}
n++;
}
// for (n=0;n<k;n++){
// if (n%2==0) printf("%d\n",pix[n]);
// }
free (bbb);
/*end read*/
thx!!!
да я уж сделал все:
FILE * fp;
fp = fopen (argv[1], "r");
fread(&pix, size, 2, fp);
эта сволочь, оказывается, работает так, первый аргумент - куда
считывать, второй аргумент - сколько считывать, третьий - по сколько
считывать, четверый откуда считывать
теперь что написано в man fread:
ОПИСАНИЕ
Функция fread считывает элементы данных nmemb (с размером каждого size байтов) с потока,
на который указывает stream, и сохраняет их в позиции, на которую указывает ptr.
как этот ман понять одному богу ясно.
> size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
> читает nmemb элементов - перевожу число элементов - значение nmemb
что такое nmemb, почему там буква b на конце стоит? это значит байт
или бит? А первую букву n понимать в смысле nmap или как еще?
> каждый размером size - т.е. каждый элемент имеет размер равный
> значению size, т.е. всего прочитается
а что такое size? всмысле sizeof(* char), а это значит, чо надо
подумать о том, сколько char занимает в стеке(а каком стеке? яж не
знаю, что их там не 20 штук на 20 случаев или еще что-то).
> nmemb*size байтов.
а каков физический смысл произведения этих двух величин? короче
говоря, так просто не въехать.
> и все что прочитали записывается в область памяти на которую
> указывает ptr,
> т.е.
> unsigned short t;
> fread((void *)&t, sizeof(t), 1, f);
> ты по русски с трудом читаешь?
по русски я беру токовый словать ожегова или даля, там толкование слов
есть... Но это, в принципе, дело опыта, а я в сях ноль полный.
Ну, короче, теперь вроде бы ясно что к чему... thx! Спасибо, что хоть
маны по русски есть...
насколько я понял из того как оно работает на выходе
x - куда читает, переменная unsigned short.
вторым аргументом идет число пар байт, находящееся в файле
третьим аргументом идет число считываемых в один элемент short
fp то, что в перле называется файловым дескриптором
если я указываю вторым аргументом не 1100000 (число штук 16 бит байтов во всем файле), а число 2, то на выходе
не получается картинка, генерирумая из 16бит IBM PC raw файла.
Непосредственно с дескрипторами файлов (переменная типа int) работает системный вызов read() (man 2 read). А FILE* (здесь могу наврать) - указатель на структуру, которая содержит в числе прочего этот дескриптор. fread - ф-ция более высокого уровня, буферизующая поток и использующая read(). Как именно устроена эта структура - тебе это надо? :)