ネイティブの Android アプリを開発するための C# の方法である dot42 について知りました。
したがって、CRC8 バイトを生成するためにいくつかの古いコードを使用する私の最初のプロジェクト方法です。プロジェクトに新しいクラスを作成し、コードをコピーして、通常どおり使用しようとしました。
私は取得し続けますjava.lang.VerifyError
か??
私のクラスは単純な数学的計算です。パブリック メソッドとしてメイン アクティビティに分割すると、期待どおりに動作します。
しかし、静的クラスを使用しようとすると、そのエラーが発生し、問題を追跡する方法がわかりません。さまざまなAndroid名前空間を追加してみました。インスタンス化する通常のクラスにしてみました。internal
メソッドCRC8.Compute("mystring")
は計算コードにも入りません(そこにブレークポイントを置いた場合)メソッドのすぐそこにスローされ、エラーが発生しますMainActivity.cs
dot42 を使用してこのようなクラスを使用するにはどうすればよいですか? (サイトでさまざまな例を見ましたが、実行する必要がある特定のことを特定することはできません)
namespace dot42Application1
{
public class CRC8
{
static byte[] table = new byte[256];
// x8 + x2 + x + 1
const byte poly = 0x07;
public static string Compute(string ASCI)
{
int crcByte = Convert.ToInt16(ComputeChecksum(System.Text.Encoding.ASCII.GetBytes(ASCI)).ToString());
return crcByte.ToString("000");
}
public static byte ComputeChecksum(byte[] bytes)
{
byte CRCInitialValue = 0xFF;
//Final XOR value 0x00;
//Not revered bytes
//Not reverse CRC berfore final byte
if (bytes != null && bytes.Length > 0)
{
foreach (byte b in bytes)
{
CRCInitialValue = table[CRCInitialValue ^ b];
}
}
return CRCInitialValue;
}
public CRC8()
{
for (int i = 0; i < 256; ++i)
{
int temp = i;
for (int j = 0; j < 8; ++j)
{
if ((temp & 0x80) != 0)
{
temp = (temp << 1) ^ poly;
}
else
{
temp <<= 1;
}
}
table[i] = (byte)temp;
}
}
}
}
たぶんこれが役立ちます。スタックトレースは...