LINUX.ORG.RU

формат файла


0

0

есть графический файл 123456.raw, с форматом записи пиксела 16 бит IBM_PC. Т.е. данные файла содержатся в виде \xff\xf1\xd3... и так далее, т.е. на каждый пиксел приходится по два байта.

Скажите, как этот файл можно с помощью С открыть как unsigned char data?

т.е. чтобы в результате чтобы получилась переменная unsigned char pixels[i] ?

Спасибо!

anonymous

Ответ на: комментарий от dikk

#include <stdio.h>
FILE * fp;
int main () {
  int l = 2895360;
  unsigned char *bbb;
  bbb = (char*)malloc(l*sizeof(char));
  fp = fopen ("1113721721.raw", "r");
  fscanf(fp,"%o",&bbb);
  int n=0;
  while (n < l) {
    printf ("%c\n",bbb[n++]);
  }
}



нифига не выводит... только перевод каретки...

то что файл содержит 2895360 байтов - точно известно. эквивалентная перловая программа выводит значения unsigned char исправно


#!/usr/bin/perl -w

$/=undef;
open F, "<1113721721.raw"; while(<F>){$t.=$_;} close F;
#$t=~s!(.)(.)!$1$2$1!gs;
push @a => $1 while($t=~m!(..)!gs);
push @res => [splice(@a, 0, 1392)] while @a;
print length $t,"\n";
print 2*1392*1040,"\n";
foreach (@res){
  foreach my $x(@{$_}){
    print unpack "C" => $x;
    print " ";
  }
  print "\n";
}

anonymous
()
Ответ на: комментарий от anonymous

fscanf(fp,"%o",&bbb) - выполняет преобразование чисел из текстового представления в двоичное. Используй fread.

man fread

kosmonavt
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.