D 错误:无法隐式转换表达式。。。类型int到ubyte

D 错误:无法隐式转换表达式。。。类型int到ubyte,d,D,我正在尝试运行此程序(): /** 将定义的GF(2^8)有限域中的两个数字相乘 通过多项式x^8+x^4+x^3+x+1。 */ ubyte gMul(ubyte a,ubyte b)纯无{ ubyte p=0; foreach(不可变的ubyte计数器;0..8){ p^=-(b&1)和a; 自动掩码=-((a>>7)和1); //0b1_0001_1011是x^8+x^4+x^3+x+1。 a=(a>=1; } 返回p; } void main(){ 进口标准转换、标准转换; 枚举宽度=u

我正在尝试运行此程序():

/**
将定义的GF(2^8)有限域中的两个数字相乘
通过多项式x^8+x^4+x^3+x+1。
*/
ubyte gMul(ubyte a,ubyte b)纯无{
ubyte p=0;
foreach(不可变的ubyte计数器;0..8){
p^=-(b&1)和a;
自动掩码=-((a>>7)和1);
//0b1_0001_1011是x^8+x^4+x^3+x+1。
a=(a>=1;
}
返回p;
}
void main(){
进口标准转换、标准转换;
枚举宽度=ubyte.max+1,高度=宽度;
自动f=文件(“rijndael_finite_field_multiply.pgm”、“wb”);
f、 writefln(“P5\n%d%d\n255”,宽度、高度);
foreach(不可变y;0..高度)
foreach(不可变x;0..width){
不可变字符c=gMul(x.to!ubyte,y.to!ubyte);
f、 写(c);
}
}
当我这样做时,我会得到以下错误:

test.d(12): Error: cannot implicitly convert expression (cast(int)a << 1 ^ 283 & mask) of type int to ubyte
Failed: ["dmd", "-v", "-o-", "test.d", "-I."]
test.d(12):错误:无法隐式转换表达式(cast(int))a如果您看到“无法隐式转换”错误,一个修复方法通常是使用
cast
运算符显式转换:

    // before
    a = (a << 1) ^ (0b1_0001_1011 & mask);


    // after
    a = cast(ubyte)((a << 1) ^ (0b1_0001_1011 & mask));
//之前
a=(a)
    // before
    a = (a << 1) ^ (0b1_0001_1011 & mask);


    // after
    a = cast(ubyte)((a << 1) ^ (0b1_0001_1011 & mask));