【问题标题】:Mapping DataTypes from C to Java将数据类型从 C 映射到 Java
【发布时间】:2012-03-15 08:40:54
【问题描述】:

有些数据类型在 C 中存在,但在 Java 中不可用。我列出了其中的一些并用 Java 编写了它们的替代品。请建议我是否做得正确或应该进行一些更改:

无符号字符 -> 短

无符号短 -> int

无符号字符 *x -> 短[] x

无符号短 *x -> int[] x

char *x -> 字符串

无符号整数 -> 长

【问题讨论】:

  • @OliCharlesworth 我正在做一个项目,我需要在 java 中编写等效(某种转换)的 C 代码。
  • 好的。但您需要记住,C 中的数据类型没有标准化的大小,这与 Java 中的不同。
  • @OliCharlesworth 这就是最大的问题。这就是我发布这个问题的原因。我假设 C 代码适用于 32 位机器
  • java中的char是无符号的!!!

标签: java c


【解决方案1】:

对于unsigned char,您应该使用Java 的char,它也是未签名的。其他的都可以,因为它们是单射的(假设 C 中常用的大小),即它们将保留值,尽管对于指针/数组来说事情要复杂得多。

【讨论】:

  • 我用了short,因为Java中的char代表unicode字符,可能会导致一些问题。
  • @Rog Matthews:任意编码的文本数据在 Java 中通常表示为 byte[] - 你不会找到例如将 short[] 转换为字符串。鉴于 C 标准保证 char 和 byte 具有相同的大小,最好将 C 中的 unsigned char 映射到 Java 中的有符号字节。
  • @Rog Matthews:如果一个字节不是 8 位,它当然会爆炸——这样的架构存在,但你不太可能遇到它们。
【解决方案2】:

我会使用以下

unsigned char -> char (16-bit) o​​r short (15-bit) o​​r /* signed*/ byte (8-bit)

unsigned short -> int 或 /* 有符号 */ short.

无符号字符 *x -> 字节[] x

无符号短 *x -> 短[] x

char *x -> String 或 char[] 或包装 byte[] 的自定义类

unsigned int -> long or /* signed */ int

在许多情况下,您可以在以前使用无符号类型时使用有符号类型。通常你需要一些小的变通方法,但有时你不需要做任何事情。

【讨论】:

  • 没错,但如果你有 8 位字符的数据,你可以使用 char、short 或 byte。
【解决方案3】:

java 有以下原始数据类型, 字节

整数 长
浮动

字符
布尔假

对于 unsigned char* x 你应该使用 String 或 char[] 或 byte[] 对于 unsigned char 你应该使用 char 对于 unsigned int,您可以使用 int 或 long(取决于)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 2015-02-24
    相关资源
    最近更新 更多