uint8_t 和 uint16_t 的 SWIG 包装
根据 SWIG 文档(21.9.1 默认基元类型映射),C uint8_t映射到 16 位的 Java Short,而 C uint_15_t 映射到 32 位的 Java int。我相信 C 函数分别是 8 位和 16 位,为什么 SWIG 在 Java 中包装时将位数加倍?
Per the SWIG Documentation (21.9.1 Default primitive type mappings), the C uint8_t is mapped to a Java short which is 16 bits and the C uint_15_t is mapped to a Java int which is 32 bits. I believe the C functions are 8 and 16 bits respectively, why does SWIG double the number of bits when wrapping in Java?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
问题是 Java 类型总是有符号的。
因此,如果您有一个从 0 到 255 的无符号 C 类型,则可以表示该范围上半部分的最小 Java 类型是短整型。
另一种方法是转移或以某种方式转换
uint8_t
以使用 Javabyte
的负数部分,但其语义非常违反直觉。The problem is that Java types are always signed.
Thus if you have an unsigned C type that goes from 0 to 255, the smallest Java type that can represent the upper half of that range is a short.
The alternative is that you shift or somehow transform your
uint8_t
to use the negative parts of Java'sbyte
, but the semantics of that are very counterintuitive.