0

JavaアプリケーションをC#に変換しているときに、奇妙で非常に厄介なコードに出くわしました。これは非常に重要で、元のバージョンで機能します。

byte[] buf = new byte[length];
byte[] buf2 = bout.toByteArray();
System.arraycopy(buf2, 0, buf, 0, buf2.length);;
for (int i = (int) offset; i < (int) length; ++i) {
  buf[i] = (byte) 255;
}

キャストエラーの原因となっている部分はbuf[i]、バイト255のセットです。Javaではjava.lang.Byte0から255までの範囲であるため、正常に動作しますSystem.Byte。.NETは0から254までの範囲です。この制限により、C#バージョンの出力はアプリケーションの特徴は、予想どおり、255の代わりにバッファに254のセットが含まれていることです。

誰かが私に実行可能な代替案を教えてもらえますか?

よろしくお願いします。

4

5 に答える 5

3

問題を誤診したと思います。.NETバイトは他の人と同じように8ビットです。より良いアプローチは、Javaコードが何をしようとしているのかを理解してから、C#で最もクリーンな同等物が何であるかを理解することです。

于 2009-08-18T20:24:28.907 に答える
1

これは、バイト値を割り当てるのではなく、255整数リテラルをバイトにキャストしていることが原因である可能性があります。代わりにを使用してみることをお勧めしますByte.MaxValue。Byte.MaxValueの値は255です。

例えば:

buf[i] = byte.MaxValue;

編集:私は間違っていました。(byte)255間違いなく255と評価されます。VSで確認しました。コードの他の場所で変更を引き起こすために何かをしている必要があります。

于 2009-08-18T20:24:25.723 に答える
0

byte.MaxValue255に等しい。

この定数の値は255(16進数の0xFF)です。

于 2009-08-18T20:24:34.587 に答える
0

MSDNによると、このC#の「制限」について絶対に確信していますか:http://msdn.microsoft.com/en-us/library/5bdb6693 (VS.71).aspx

C#バイトは、0〜255の範囲の値を持つ符号なし8ビット整数です。

于 2009-08-18T20:24:37.377 に答える
0

MDSNから

バイト:

byteキーワードは、次の表に示すように値を格納する整数型を示します。

  • .NET Frameworkタイプ:システムバイト
  • 範囲:バイト0〜255
  • サイズ:符号なし8ビット整数
于 2009-08-18T20:26:38.327 に答える