伽罗华域 galois_mul2 转换为 javascript?
galois field galois_mul2 convertion to javascript?
我很难将 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);
}
如果我在 C 代码中给输入 222 其 return 167
而在我的代码中它是 return 423.
有什么问题?
您可能知道,JavaScript 中的数字是 64 位浮点数。但是,即使你有一个 UInt8Array
对象,并对其进行索引,JavaScript 也会在将它提供给你之前将内部 8 位数字转换为双精度数,因此 value << 1
可以变成 9 -位数:尝试 var arr = new Uint8Array([222]); (arr[0] << 1).toString(2)
并注意输出为九长。
要解决此问题,只需使用 0xFF
掩码以保留最低八位:
function galois_mul2(value) {
if (value >> 7) {
return ((0xff & (value << 1)) ^ 0x1b);
}
return 0xff & (value << 1);
}
然后,galois_mul2(222)
returns 167.
我很难将 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);
}
如果我在 C 代码中给输入 222 其 return 167 而在我的代码中它是 return 423.
有什么问题?
您可能知道,JavaScript 中的数字是 64 位浮点数。但是,即使你有一个 UInt8Array
对象,并对其进行索引,JavaScript 也会在将它提供给你之前将内部 8 位数字转换为双精度数,因此 value << 1
可以变成 9 -位数:尝试 var arr = new Uint8Array([222]); (arr[0] << 1).toString(2)
并注意输出为九长。
要解决此问题,只需使用 0xFF
掩码以保留最低八位:
function galois_mul2(value) {
if (value >> 7) {
return ((0xff & (value << 1)) ^ 0x1b);
}
return 0xff & (value << 1);
}
然后,galois_mul2(222)
returns 167.