小编Moj*_*jca的帖子

Fortran:如何将值255存储到一个字节中?

我想从Fortran调用一个C api函数.C函数接受一个字节数组:

void image(const void *bitmap, int w, int h);
Run Code Online (Sandbox Code Playgroud)

其中三个连续的字节*bitmap代表一个RGB颜色tripple,并unsigned char在C 中解释.我想在Fortran中初始化位图并负责在C.内部绘图.Fortran中的当前定义使用

integer*1 rgbImage(6,2)
Run Code Online (Sandbox Code Playgroud)

例如,初始化2x2的图像,但编译器不接受赋值

rgbImage(1,1) = 255
Run Code Online (Sandbox Code Playgroud)

得到红色.我已经看到了使用的提示BYTE,UNSIGNED*1,LOGICAL*1无符号字节单,但gfortran(MacPort的GCC 4.4或4.6在Mac OS X)不符合任何一方的真的很开心.我可能会因为作弊和分配价值-1而逃脱255,但是使用起来非常不舒服.编译器标志-fno-range-check有助于编译代码,但可能在其他Fortran编译器中不可用,我认为它是一个丑陋的解决方案(我仍然希望捕获其他警告).值'FF'X'11111111'B也被识别为32位整数.

非常希望代码可以跨不同的Fortran编译器移植.

fortran gfortran

5
推荐指数
1
解决办法
2669
查看次数

当dpkg-architecture不存在时,如何区分linux上的mips cpu类型?

简短的问题:如何在任何Linux发行上可靠地区分mips,mipsel,mips64mips64el

更长的解释:

我们为许多架构提供静态构建/分发独立二进制文件(用于TeX).安装脚本通常运行uname -suname -m确定操作系统和体系结构.然后根据该决定从服务器获取二进制文件,因此它需要可靠地工作.确实如此.几乎除了Mac OS X 10.6和Debian之外的所有地方.Mac将在运行64位应用程序的操作系统上报告i386,而Debian报告mips64用于32位操作系统.

mips64上的 Debian 正确报告处理器类型,但这至少有两个原因对我没有帮助:

  1. 操作系统是32位,而不是名称可能暗示的64位.
  2. 它以little-endian模式运行.Debian称之为mipsel,而不是mips.它通常可以切换,但操作系统只能在一种模式下运行,而mips软件通常与mipsel不兼容.

以下是系统命令的一些输出:

$ file my_binary_name
my_binary_name: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, with unknown capability 0xf41 = 0x756e6700, with unknown capability 0x70100 = 0x1040000, stripped

$ dpkg-architecture 
DEB_BUILD_ARCH=mipsel
DEB_BUILD_ARCH_OS=linux
DEB_BUILD_ARCH_CPU=mipsel
DEB_BUILD_ARCH_BITS=32
DEB_BUILD_ARCH_ENDIAN=little
DEB_BUILD_GNU_CPU=mipsel
DEB_BUILD_GNU_SYSTEM=linux-gnu
DEB_BUILD_GNU_TYPE=mipsel-linux-gnu …
Run Code Online (Sandbox Code Playgroud)

architecture linux mips endianness mips64

3
推荐指数
1
解决办法
8157
查看次数

标签 统计

architecture ×1

endianness ×1

fortran ×1

gfortran ×1

linux ×1

mips ×1

mips64 ×1