我正在尝试将以下C ++代码移植到VBScript,但是在尝试使用按位XOR运算符时由于溢出而出现问题。
buffer
是一个整数数组(size = 6)。
ris.ID_OPER = atoi(buffer);
for( i=0; i<=5; i++ )
chk += (unsigned long)(buffer[i]);
chk = chk ^ ris.ID_OPER;
chk = chk & 0xff;
sprintf( buf, "%02X", chk );
VBSCRIPT - 代码
chkbin = Clng(chkbin)
chkbin = 1 Xor 11110001001000000
出现溢出错误(溢出:'[编号:1,1110001001E + 16]')
答案 0 :(得分:0)
我认为任何优秀的开发人员应该知道的溢出是你的数据存储变量不足以在转移后保留该值。一个或多个位有&#34;掉线&#34;取决于大或小的Endian二进制是&#34;在幕后&#34;开始还是结束。尝试使用CDbl()或货币类型而不是Clng()。 VB脚本对于C ++无符号值少一点,因为它使用有符号长整数(一位持有+或 - ),除了使用更大的数据类型之外,可能还有另一种方法,请查看http://blogs.msdn.com/b/ericlippert/archive/2004/12/03/integer-arithmetic-in-vbscript-part-two.aspx
有符号和无符号的最大值
无符号长。
4294967295
长。
2147483647
仅少1位表示可用的最高值约为一半
最后使用CCur()因为货币也拥有更大的数字值,并且能够存储超过一长的货币。