我需要将一段代码从Objective-C转换为Java,但我在Objective-C中理解原始类型时遇到了问题。所以我在Objective-C代码中有他们的数据类型:
UInt64, Uint32, UInt8
,
是无符号整数(据我所知,从互联网上)。所以我的问题是,我可以使用byte
(8位)等Java原始类型 - 而不是UInt8
,int
(32位) - 而不是UInt32
和{{1 (64位) - 而不是long
。
答案 0 :(得分:2)
不幸的是,这不是一个直接的翻译,如果不了解你的程序,很难说出“正确”的方法是什么。
如果您的UInt8值确实在0-255之间,则可能必须使用Java签名int
才能保留整个范围。
如果您正在处理字节流或内存布局,并且确实只需要使用单个字节的内存,那么您可以尝试使用byte
,但您可能需要测试和处理要处理的情况设置高位(值> 127)。与其他未签名类型同上。
理想情况下,如果您的代码只是对无符号类型“默认”,但实际上签名版本也可以正常工作(即您的值的范围永远不会等于或超过2 ^ 7,2 ^ 15或2分别为^ 31,那么你对byte
,int
和long
的“直接”翻译可能没问题。
答案 1 :(得分:0)
是的,这些是在Java中使用的正确大小的数据类型。确保考虑到Java does not have unsigned types,并且诀窍是使用下一个最大的尺寸。 64位无符号算术需要特别考虑。