こんにちは、C#アプリケーションをアンドロイドに変換し、C#と同じバイト配列からチェックサムを計算しています。しかし、それはバイト配列の下で間違った値を返します。誰でもこれを手伝ってください。ありがとう。チェックサムの計算がアンドロイドの間違った値を返します
C#バイト配列:
[41、132、41、132、41、132、41、132、41、132、41、132、41、132、41、132、41、132、41 、132、41、132、41、132、41、132、41,132,41,132,41,132,41,132,41,132,41,132,41,132,41,132,41,132 、41、132、41、132、41、132、41、132、41,132,41,132,41,132,41,132,41,132,41,132,41,132,41,132,41 、132、41、132、41、132、41、132、41,132,41,132,41,132,41,132,41,132,41,132,41,132,41,132,41,132 、41、132、41、132、41、132、41、132、41,132,41,132,41,132,41,132,41,132,41,132,41,132,41,132,41 、132、41、132、41、132、41、132、41,132,41,132,41,132,41,132,41,132,41,132,41,132,41,132,41,132 、41、132、41、132、41、132、41、132、41,132,41,132,41,132,41,132,41,132,41,132,41 、132、41、132、41、132、41、132、41,132,41,132,41,132,41,132,41,132,41,132,41,132,41,132,41,132 、41、132、41、132、41、132、41、132、41,132,41,132,41,132,41,132,41,132,41,132,41,132,41,132,41 、132、41、132、41、132、41、132、41,132,41,132,41,132,41,132,41,132,41,132,41,132,41,132,41,132 、41、132、41、132、41、132、41、132、41,132,41,132,41,132,41,132,41,132,41,132,41,132,41,132,41 、132、41、132、41、132、41、132、41、132、41、132、41、132、41、132]
C#コード:
public static uint CalculateChecksum(byte[] buffer, int offset, int length)
{
uint cs = 0;
for (int i = offset; i < offset + length & i < buffer.Length; i += 2)
{
ushort s = BitConverter.ToUInt16(buffer, i);
cs += s;
}
return cs;
}
値取得4736620この変換値からバイト配列に[108,70,72,0]が返される
アンドロイドバイト配列
[41、-124、41、-124、41、-124、41、-124、41、-124、41、-124、41、-124、41、-124 41、-124、41、-124、41、-124,41、-124、41、-124、41、-124、41、-124、41、-124、41、-124、41、-124 41、-124、41、-124、41、-124,41、-124、41、-124、41、-124、41、-124、41、-124、41、-124、41、-124 41、-124、41、-124、41、-124,41、-124、41、-124、41、-124、41、-124、41、-124、41、-124、41、-124 41、-124、41、-124、41、-124,41、-124、41、-124、41、-124、41、-124、41、-124、41、-124、41、-124 41、-124、41、-124、41、-124,41、-124、41、-124、41、-124、41、-124、41、-124、41、-124、41、-124 41、-124、41、-124、41、-124,41、-124、41、-124、41、-124、41、-124、41、-124、41、-124、41、-124 41、-124、41、-124、41、-124,41、-124、41、-124、41、-124、41、-124、41、-124、41、-124、41、-124 、41、-124、41、 -124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、 -124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、 -124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、 -124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、 -124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、 -124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、-124,41、 -124]
アンドロイドコード:
public static long checkSum(byte[] buffer, int offset, int length) {
long cs = 0;
for (int i = offset; i < offset + length & i < buffer.length; i += 2) {
ByteBuffer bb = ByteBuffer.allocate(2);
bb.order(ByteOrder.LITTLE_ENDIAN);
bb.put(buffer[i]);
bb.put(buffer[i+1]);
long shortVal = bb.getShort(0);
cs += shortVal;
}
return cs;
}
値取得-4438420このヴァル変換バイト配列にUE
ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt((int) value).array();
は[108,70、-68、-1]間違って何をして
をやっていますか?なぜその戻り値が異なるのですか? 私を助けてください。ありがとうございました。
そのバイト配列を意味ビッグエンディアン形式(-124 + 256 = 132)であった。代わりに、短いは(USHORTになることはありませんができる)が負である場合に^ 16 2を追加することができます。その理由は、LittleEndian形式の戻り値とバイト配列をJavaバイト配列で取得するのは、C#の符号なし(0〜256)であることです(-127から127)。 – Nas
@Nas値が符号付きであるかどうかの違いは価値の違いは、まだ。 – Georg
例えば、2番目のポジションは132 amにする必要がありますか? – Nas