在进行乘法运算时常常会忽略数据溢出的问题,看下面的代码:
1 2 3 4 5 | uint32_t Tmp_HH = 0xFF, Tmp_MM = 0xFF, Tmp_SS = 0xFF; char* ptr; Tmp_HH == (*(ptr+0))*10 + *(ptr+1); Tmp_MM == *(ptr+2)*10 + *(ptr+3); Tmp_SS == *(ptr+4)*10 + *(ptr+5); |
很明显在乘10的运算中就有数据溢出的可能,正确的做法应该是:
1 2 3 | Tmp_HH = *(ptr+0);Tmp_HH *= 10;Tmp_HH += *(ptr+1); Tmp_MM = *(ptr+2);Tmp_MM *= 10;Tmp_MM += *(ptr+3); Tmp_SS = *(ptr+4);Tmp_SS *= 10;Tmp_SS += *(ptr+5); |
虽然在此处用来计算时分秒不会溢出,但是也应该考虑这个问题。