首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Fortran:如何将255值存储到一个字节中?

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

Stack Overflow用户
提问于 2012-05-25 22:09:07
回答 2查看 3K关注 0票数 5

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

代码语言:javascript
运行
复制
void image(const void *bitmap, int w, int h);

其中,*bitmap中的三个连续字节表示RGB颜色三元组,在C中被解释为unsigned char。我希望在Fortran中初始化位图并在C中绘制当前定义使用

代码语言:javascript
运行
复制
integer*1 rgbImage(6,2)

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

代码语言:javascript
运行
复制
rgbImage(1,1) = 255

以获得红色。我看到过使用BYTEUNSIGNED*1LOGICAL*1处理无符号单字节的暗示,但gfortran ( Mac下MacPort的gcc 4.4或4.6 )对这两种语言都不太满意。我也许可以通过作弊和赋值-1而不是255来逃脱惩罚,但这使用起来非常不舒服。编译器标志-fno-range-check帮助编译了代码,但可能在其他Fortran编译器中不可用,我认为这是一个丑陋的解决方案(我仍然希望捕获其他警告)。值'FF'X'11111111'B也被识别为32位整数。

代码在不同Fortran编译器之间的可移植性是非常理想的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-25 22:18:30

我的建议是使用CHARACTER变量,并使用ACHAR设置值(如果需要,使用ICHAR将其转换回整数)。这应该会让你得到你想要的东西,并且是完全可移植的。例如,

代码语言:javascript
运行
复制
character, dimension(6,2) :: rgbImage

rgbImage(1,1) = achar(255)

更新为添加:如果您打算使用Fortran2003的iso_c_binding工具来连接C例程(强烈推荐!)然后,您还可以将该rgbImage数组字符设置为c_char类型,例如

代码语言:javascript
运行
复制
character(kind=c_char), dimension(6,2) :: rgbImage
integer(kind=c_int) :: w, h

...
rgbImage(1,1) = achar(255)
...

call image(rgbImage, w, h)

在其中定义了例程的接口

代码语言:javascript
运行
复制
 interface
    subroutine image(img, w, h) bind(C)
       use, intrinsic :: iso_c_binding
       implicit none
       integer(kind=c_int), intent(in), value :: w, h
       character(kind=c_char) :: img(:,:)
    end subroutine image
 end interface
票数 13
EN

Stack Overflow用户

发布于 2014-02-13 06:12:53

另一种可能适用于某些情况的策略是将1字节的c整型数组传递给整数(1)数组,例如iVal(:),然后创建另一个整数数组,如Integer(2) iVal2(:),然后:

代码语言:javascript
运行
复制
Where(iVal(:) < 0)
    iVal2(:) = -iVal(:)+127
ElseWhere
    iVal2(:) = iVal(:)
End Where

..。与转换为/fro字符(有时)相比,这可能会更高效/更干净一些,并且(有时)需要更少的代码。

如果你做了很多这样的事情(将各种类型的usigned等连接到Fortran),那么一些依赖Fortran的位内部函数的实用程序可能是值得投资的(例如BTest(),iBSet()等)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10755896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档