首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定HDF5变量在NetCDF中的符号状态

确定HDF5变量在NetCDF中的符号状态
EN

Stack Overflow用户
提问于 2013-04-30 22:28:59
回答 3查看 279关注 0票数 2

我的团队已经获得了HDF5文件可阅读的权限。它们包含带有无符号变量的结构化数据。我和我的团队非常高兴地找到了NetCDF库,它允许纯Java读取HDF5文件,尽管使用了NetCDF数据模型。

没问题--我们以为我们应该把NetCDF数据模型转换成我们想要的任何模型。只要我们把数据拿出来。然后我们尝试从HDF5文件中读取一个无符号的32位整数。我们可以加载HDFView 2.9并看到变量是一个无符号的32位整数。但是..。原来是不支持无符号值

为了使伤害雪上加霜,NetCDF-3建议您“扩大数据类型”或使用_Unsigned = "true"属性(我不是在捏造这个属性)来指示这32位应该被视为一个无符号值。

好吧,如果我从头开始创建NetCDF数据,这些知识可能是有效的,但是如何使用NetCDF检测到现有HDF5文件中的32位值应该被解释为无符号?

更新:显然是NetCDF 4确实支持无符号数据类型。。因此,这就引出了一个问题:如何确定一个值是从NetCDF Java库中签名的还是未签名的?“,我在ucar.ma2.DataType中没有看到任何无符号类型。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-01 14:05:45

是的,您可以查找_Unsigned = "true“属性,也可以调用Variable.isUnsigned()。

因为Java不支持无符号类型,这是一个困难的设计决策。最后,为了提高效率,我们决定不自动扩大类型。因此,应用程序必须检查并执行正确的操作。查看ucar.nc2.DataType.unsignedXXX()助手方法。

当您读取数据时,您将得到一个Array对象。您可以调用Array.isUnsigned()。此外,像Array.getDouble()这样的提取器将正确地转换。

netCDF库支持一个名为“公共数据模型”的扩展数据模型,以抽象出文件格式的差异。因此,我们并不局限于netCDF 3文件格式或数据模型的限制。但我们在爪哇

约翰

票数 3
EN

Stack Overflow用户

发布于 2013-05-01 18:34:35

考虑到Java没有无符号类型,我认为唯一的选择是: 1)自动扩大无符号数据(将字节转换为空号,将空号转换为ins,或者2)用可用的Java数据类型表示有符号整数和无符号整数,并让用户决定是否/何时应将其加宽。

可以说,无符号数据的主要用途是表示位,在这种情况下,转换将是一种浪费,因为您只需要掩码和测试比特。

另一个主要用途是卫星数据,它经常使用无符号字节,我认为不自动扩大是正确的选择。你最终所做的只是在你使用它的时候扩大范围。

票数 1
EN

Stack Overflow用户

发布于 2013-04-30 23:27:06

似乎当CDM 数据类型映射到Java时,NetCDF将自动向变量添加属性_Unsigned = "true"。因此,假设如果我检查该属性,它将指示该值是否为无符号。这可能正是我所要找的;我明天将核实它是否有效。

Update:我尝试了这个方法,它可以工作;而且,正如John在接受的答案中所指出的,NetCDF数组有一个isUnsigned()方法来检查_Unsigned属性。

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

https://stackoverflow.com/questions/16309991

复制
相关文章

相似问题

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