4

我正在尝试将 C 中的程序重新编写为 java。我没有 C 经验,但有一些 C++ 经验,所以我了解一些指针/数组的东西。不过我有点困惑......我在 C 中给出了以下代码:

void ProcessStatus(Char *Stat){
    DWORD relayDate;
    DWORD APIDate;

    version3=false;
    version4=false;
    version9=false;
    tiltAngle = false;
    ver4features=0;
    tooNew=false;
    ProgRev=0;

    switch(Stat[14]){

据我了解,该函数ProcessStatus传递了一个指向 char 的指针;我假设因为在提供的代码的最后一行Stat[14]被称为它的数组内。

所以我感到困惑的是如何将指针传递给 Java 中的数组中的 char。

任何帮助将不胜感激,即使它有助于我理解 C 代码。谢谢。

4

4 回答 4

4

很难说它是一个字符串还是一个已经传递的原始数据。

如果是字符串,请使用 Java 内置的 String 类。

void ProcessStatus( String stat)
{
  ...

  switch ( stat.charAt( 14 ) )
  {
  } 
}

如果是原始数据数组,请使用byte数组

void ProcessStatus( byte[] stat)
{
  ...

  switch ( stat[ 14 ] )
  {
  } 
}

顺便说一句,C 的char数据类型被转换为byteJava 中的类型。charJava 中的 type 表示 2 个字节长的 UTF-16 字符。 byte正是它的本质(8 位,有符号)。

于 2012-07-16T13:24:39.357 回答
2

由于 C 没有内置的 String 类型,因此 C 中的 String 表示为一个字符数组。在 C 中,传递指向数组中第零个元素的指针等同于传递对数组的引用,我认为这就是我认为这段代码正在做的事情。本质上,将 char* Stat 替换为 String Stat 并将 switch(Stat[14]) 替换为 switch(Stat.charAt(14))

于 2012-07-16T13:22:10.590 回答
2

首先,澄清一下,它不是 a char,而是 a Char; Char带有大写字母C的是一些用户定义的类型。它可能只是一个 typedef for char,也可能是别的东西;我们不知道。

其次,传递给该方法的显然是指向Char对象块的第一个元素的指针。最接近的等价物是 Java 数组,但取决于您如何执行此操作,您可以将数据结构完全保留在 C 中,将指针作为 a 传递long给 Java,并让 Java 通过调用您提供的本机函数来操作它。Java 数组与 C 中的“数组”或连续分配的对象序列完全不同。

于 2012-07-16T13:23:33.553 回答
2

大多数时候,当您在 C 或 C++ 中看到char *(我不知道您最初的上限Char是什么)时,Java 等价物将是Stringor char[]。前者是字符串类,后者是字符数组。

使用的等效函数签名String如下所示;我们charAt用来访问第 15 个字符:

void ProcessStatus(String Stat){
    // ...
    switch (Stat.charAt(14))
    // ...
}

等价的 withchar[]看起来像这样(因为它是一个数组,我们像在 C 中使用char *or一样对它进行索引char[]):

void ProcessStatus(char[] Stat){
    // ...
    switch (Stat[14])
    // ...
}
于 2012-07-16T13:23:34.100 回答