我有以下代码:
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];
还有其他方法可以编写这行代码吗?
由于
答案 0 :(得分:0)
您是否正在尝试访问密钥变量中的第j位?我不认为Apex支持这样的语法(带索引)。 []
运算符是为数组保留的,这就是你得到的错误。
实际上它甚至不是我认为的算子(http://www.salesforce.com/us/developer/docs/apexcode/Content/langCon_apex_expressions_operators_understanding.htm),只是写myList.get(index)
的捷径。
再次尝试换档技巧?
Long key = 255;
System.debug(key & (1 << 7)); // 128
System.debug(key & (1 << 8)); // 0