gpt4 book ai didi

android - 如何在 Visual Studio 中使用 dot42 创建类?

转载 作者:搜寻专家 更新时间:2023-11-01 08:56:10 24 4
gpt4 key购买 nike

我刚刚发现了 dot42,这是一种用于开发原生 Android 应用程序的 C# 方法。

所以我的第一个项目方法是使用一些旧代码来生成 CRC8 字节。我在项目中新建了一个类,将代码复制过来,尝试正常使用。

我不断得到 java.lang.VerifyError ??

我的课是简单的数学计算。当我将它作为公共(public)方法分解到主要 Activity 中时,它会按预期工作。

enter image description here

但是,如果我尝试使用静态类,则会出现该错误,而且我不知道如何找出问题所在?我尝试添加各种 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;
}
}




}
}

也许这有帮助。堆栈跟踪显示...

enter image description here

最佳答案

这确实是 dot42 编译器中的一个错误,行:

int crcByte = Convert.ToInt16(...) 在内部结束为 short,即 16 位,而不是调用 int 上的 ToString,传递 16 位值,而不将其向上转换为 32 位,从而导致验证错误。

我们(dot42 编译器团队)为此问题创建了一个案例/票证。

作为解决方法,您可以将代码更改为:int crcByte = Convert.ToInt32(...)

希望这对您有所帮助。

关于android - 如何在 Visual Studio 中使用 dot42 创建类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18751759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com