0

我有以下代码:

public class Testcode {



private static final Long[] P = new Long[18];             

public void setKey( string key )    

{    

integer i, j, k;    

long data;    

integer N = 16;    

string[] keytemp = new string[]{}; keytemp.add(key);



// Initialize P and S.    

for ( i = 0; i < N + 2; ++i ){        

P[i] = Pinit[i];        

}              

// XOR the key into P.    

j = 0;    

for ( i = 0; i < N + 2; ++i )        

{        

data = 0;        

for ( k = 0; k < 4; ++k )        

{       

data = ( data << 8 ) | keytemp[j];        

++j;        

}        

P[i] ^= data;        

}              

}   



private static final long[] Pinit = new Long[] {       

604135516L,   2242044355L,  320440478L ,  57401183L,        

2732047618L,  698298832L,   137296536L ,  3964563569L,        

1163258022L,  954160567L,   3193502383L,  887688400L,        

3234508543L,  3380367581L,  1065660069L,  3041631479L,        

2420952273L,  2306437331L       

};      

}

我收到以下错误:

错误:编译错误:OR 运算符只能应用于布尔表达式或第 36 行第 18 列的 Integer 或 Long 表达式

这是在这一行:

   data = ( data << 8 ) | keytemp[j];

有没有另一种方法来编写这行代码?

谢谢

4

2 回答 2

1

我假设 keytemp 数组包含长度为 1 的字符串,因为 Apex 没有 Character 原语。您必须将每个字符串的第一个字符转换为整数,然后执行 OR。

不幸的是,Apex 似乎没有内置方法来获取单字符字符串的 ASCII 值。您可能必须编写自己的转换器函数。以下是一些有相同问题的人提出的一些解决方案:

讨论如何将字符串转换为 ASCII 值

于 2013-05-31T20:47:52.573 回答
1

类似的东西?

除了数组的初始启动之外没有循环......稍后我们必须分别获取每个字符,但看起来您的算法无论如何都需要 1-char 长字符串?

List<Integer> ints = new List<Integer>();
for(Integer i =0; i < 256; ++i){
    ints.add(i);
}
String allAscii = String.fromCharArray(ints);

// System.debug(allAscii);  // funny result if you really want to start from 0x00 character
System.debug(allAscii.substring(1));    // for demo purposes we'll show only from 0x01 though

String text = 'Hi StackOverflow.com!';
for(Integer i =0; i < text.length(); ++i){
    String oneChar = text.mid(i, 1);
    System.debug(oneChar + ' => ' + allAscii.indexOf(oneChar));
}

输出:

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{&#124;}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ

H => 72
i => 105
  => 32
S => 83
t => 116
a => 97
c => 99
k => 107
O => 79
v => 118
e => 101
r => 114
f => 102
l => 108
o => 111
w => 119
. => 46
c => 99
o => 111
m => 109
! => 33

对我来说看起来不错(空间是#32等)。

如果您构建 aMap<String, Integer>而不是 indexOf ,可以进一步优化线性搜索,但我会说它足够好?

于 2013-05-31T22:30:45.940 回答