用魔法數(shù)字2559將字符串轉(zhuǎn)成整型

編程中字符串轉(zhuǎn)整型有很多種方法,現(xiàn)在要介紹一種黑科技方法(雖然沒什么卵用)。
不過這個方法只對2字符和3字符的字符串有效,在C/C++中比較好使。
2字符版本:(*(short *)"AB" & 0xf0f) * 2569 % 2559 == A*10+B
3字符版本:(*(int *)"ABC" & 0xf0f0f) * 2659 % 2559 == A*100+B*10+C
(以上A,B,C都是0到9的數(shù)字)

數(shù)學(xué)原理如下:
首先(*(short *)"AB" & 0xf0f)可以得到A+B*256,然后
(A+B*256)*2569%2559
=(A*2569+B*256*2569)%2559
=(A*(2569%2559)+B*(256*2569%2559))%2559
=(A*10+B)%2559
∵0≤A*10+B<2559
∴(A*10+B)%2559=A*10+B
3字符版本的證明同理。
以上是個人發(fā)呆時的產(chǎn)物
標(biāo)簽: