Фортран: Как сохранить значение 255 в один байт?

Я хотел бы вызвать функцию C api из Fortran. Функция C принимает массив байтов:

void image(const void *bitmap, int w, int h);

, где три последовательных байта в *bitmapпредставляют тройку цветов RGB и интерпретируются как unsigned charв C. Я хочу инициализировать растровое изображение в Fortran и позаботьтесь о рисовании внутри C. Текущее определение в Fortran использует

integer*1 rgbImage(6,2)

для инициализации изображения 2x2, например, но компилятор не примет назначение

rgbImage(1,1) = 255

для получения красного цвета. Я видел намеки на использование BYTE, UNSIGNED*1, LOGICAL*1для одиночных байтов без знака, но gfortran (MacPort's gcc 4.4 или 4.6 под Mac OS X) не очень доволен ни одним из них. Я, вероятно, мог бы избежать обмана и присвоить значение -1вместо 255, но это очень неудобно в использовании. Флаг компилятора -fno-range-checkпомог скомпилировать код, но может быть недоступен в других компиляторах Fortran, и я считаю это уродливым решением (я все равно хотел бы поймать другое предупреждение). Значения 'FF'Xили '11111111'Bтакже распознаются как 32-битные целые числа.

Крайне желательно, чтобы код был переносимым между различными компиляторами Фортрана.

5
задан Mojca 25 May 2012 в 14:09
поделиться