gpt4 book ai didi

java - 优化 Java Card 上的代码顺序

转载 作者:行者123 更新时间:2023-11-30 02:54:40 28 4
gpt4 key购买 nike

我正在尝试在 Java Card 上实现 BCH 代码修正。我已经实现了 encode 函数,现在正在对输入进行解码。我的结果似乎是正确的,但在 decode 函数上花费的时间非常长。我发现下面给出的代码序列是最耗时的。

    Util.arrayCopy(data, OFFSET_START, transientMemory, OFFSET_START,LENGTH);
short i, j, u, q, t2, count = 0, syn_error = 0;
t2 = (short) (2 * T);
for (i = 1; i <= t2; i++)
{
for (j = 0; j < LENGTH; j++)
if (transientMemory[j] != 0)
{
short t = (short)(i*j);
if(t < 0) // (i*j > 32767 )
{
t &= (short)0x7FFF;
t += 64; // hack because n is always 511
}
t %= n;
s[i] ^= ALPHA_TO[t]; // stored in EEPROM
}
if (s[i] != 0)
syn_error = 1;
s[i] = (short) INDEX_OF[s[i]]; //stored in EEPROM

}
Util.arrayCopy(transientMemory, OFFSET_START, data, OFFSET_START,LENGTH);
ISOException.throwIt(ISO7816.SW_CORRECT_LENGTH_00); // for stopping the program

我为 byte[] 预先分配了两个 RAM transientMemory 缓冲区,为 short[] 预先分配了 temp_ram,但是time 看来执行时间仍然很大( 370 s )。本例中 t2 的值为 104t2 的值为 104长度386。有什么办法可以让这段代码更好地工作

最佳答案

你可以减少一些力量。某些低端 CPU 上的乘法和除法成本很高,所以我会替换

short t = (short)(i*j);

在内循环之前将其声明为 short t = 0 后通过 t += i 实现。

如果我正确理解了这个 block

if(t < 0) // (i*j > 32767 )
{
t &= (short)0x7FFF;
t += 64; // hack because n is always 511
}
t %= n;

如果 tint,它的作用与 t %= 511 的作用相同。由于 t 必须适合无符号短整型,假设您可以编写普通 Java

t += (t & 511) + ((t >>> 9) & 63);
if (t >= 511) t -= 511;

不知道如何将其转换为您需要的内容,因为我不知道如何表达 short 的移位(在普通 Java 中,移位操作数被提升为 int )。它可能会按照我写的方式工作......

关于java - 优化 Java Card 上的代码顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37620205/

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