奇妙な質問かもしれませんが、インターネットを閲覧しているバイナリ除算の Java 実装は見つかりませんでした。CRC16 コーディングに使用するため、10 進数に変換することは解決策ではありません。紙の方法は理解していますが、私は初心者であり、非常に重要であるため、間違ってはなりません。私が見つけた唯一のものは、バイナリ除算を使用するcode.google.comのCRC.javaですが、その除算部分のみを使用しても(他の部分を削除しても)、望ましい値が得られません。
誰かが私にそれのJava実装を見せてもらえますか? よろしくお願いします!前もって感謝します
私が見つけたコード:
public class CRC {プライベート文字列データ、除数。
public CRC(String d, String di) {
this.data = d;
this.divisor = di;
}
public String getRemainder(String data, String divisor) {
int x = 1, z = divisor.length(), j = 0, i;
String data2 = "", strOfZeros = "";
int y = divisor.length() - 1;
/* This is to get correct amount of zero's onto the end of the data */
while (y > 0) {
data += "0";
y--;
}
// Main part of method, this is the long division of Binary numbers.
needToExit: for (i = x, j = 1; i < z && z <= data.length(); i++, j++) {
if (z == data.length() && data2.charAt(0) == '1') {
strOfZeros = "";
for (i = 1; i < divisor.length(); i++) {
if (data2.charAt(i) == divisor.charAt(i))
strOfZeros += '0';
else
strOfZeros += '1';
}
data2 = strOfZeros;
break needToExit;
}
if (data.charAt(i) == divisor.charAt(j))
data2 += "0";
else
data2 += "1";
if (i == divisor.length() - 1) {
data2 += data.charAt(z);
x++;
z++;
// i = x;
j = 0;
// when first bit is a 0
while (data2.charAt(0) != '1' && i == divisor.length() - 1) {
for (i = 1; i < divisor.length(); i++) {
if (data2.charAt(i) == '0')
strOfZeros += "0";
else
strOfZeros += "1";
}
strOfZeros += data.charAt(z);
data2 = strOfZeros;
strOfZeros = "";
x++;
z++;
i = x;
}
}
}
return data2;
}
public String getDataPlusCRC(String data){
String str = data.concat(getRemainder(this.data, this.divisor));
return str;
}
}
getRemainder()
数値に除算しようとすると、この方法では悪い結果が得られます。そして、この部分はCRCのために必要なので、必要ありません。
while (y > 0) {
data += "0";
y--;
}