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には組み込みの文字列型がないため、Cの文字列は文字の配列として表されます。配列の0番目の要素へのポインターを渡すことは、Cでは、配列への参照を渡すことと同じです。これは、このコードが行っていることだと思います。基本的に、char *StatをStringStatに置き換え、switch(Stat [14])をswitch(Stat.charAt(14))に置き換えます。

于 2012-07-16T13:22:10.590 に答える
2

まず、明確にするために、これはcharではなくChar; です。Char大文字Cはユーザー定義型です。の typedef である場合もあれcharば、他のものである場合もあります。私たちは知りません。

次に、メソッドに渡されているのは、Charオブジェクトのブロックの最初の要素へのポインターであるようです。最も近いものは Java 配列ですが、これを行う方法によっては、データ構造を完全に C のままにし、ポインターlongを Java に として渡し、提供するネイティブ関数を呼び出して Java に操作させることができます。Java 配列は、C で連続して割り当てられたオブジェクトの「配列」またはシーケンスとはまったく異なります。

于 2012-07-16T13:23:33.553 に答える
2

ほとんどの場合、C または C++ で表示される場合char *(最初にキャップされたものはわかりません)、Java の同等物はorになります。前者は文字列クラス、後者は文字配列です。CharStringchar[]

を使用した同等の関数シグネチャは次のStringようになります。charAt15 番目の文字にアクセスするために使用します。

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

と同等のものは次のようになります (これは配列なので、またはC でchar[]行うようにインデックスを付けます):char *char[]

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