我很难将galois_mul2函数转换为javascript。
我在c
中有以下功能 unsigned char galois_mul2(unsigned char value)
{
if (value >> 7)
{
return ((value << 1) ^ 0x1b);
}
else
return (value << 1);
}
Javascript代码
galois_mul2( value){
if (value >> 7)
{
return ((value << 1) ^ 0x1b);
}
else
return (value << 1);
}
如果我给输入222它的c代码返回167 而在我的代码中它返回423。
出了什么问题?
答案 0 :(得分:2)
您可能知道,JavaScript中的数字是64位浮点数。但是,即使你有一个UInt8Array
对象并将其编入索引,JavaScript也会在将内部8位数转换为double之前将其转换为double,因此value << 1
可以成为一个9位数:尝试var arr = new Uint8Array([222]); (arr[0] << 1).toString(2)
并注意输出为九长。
要解决此问题,只需使用0xFF
进行屏蔽,以保持最低的8位:
function galois_mul2(value) {
if (value >> 7) {
return ((0xff & (value << 1)) ^ 0x1b);
}
return 0xff & (value << 1);
}
然后,galois_mul2(222)
返回167。