… | |
… | |
29 | bin[3] = (unsigned int)num >> 8; |
29 | bin[3] = (unsigned int)num >> 8; |
30 | bin[4] = (unsigned int)num >> 0; |
30 | bin[4] = (unsigned int)num >> 0; |
31 | |
31 | |
32 | XPUSHs (sv_2mortal (newSVpvn (bin, 5))); |
32 | XPUSHs (sv_2mortal (newSVpvn (bin, 5))); |
33 | |
33 | |
|
|
34 | SV * |
|
|
35 | str2nummer (SV *str) |
|
|
36 | CODE: |
|
|
37 | STRLEN len; |
|
|
38 | int i; |
|
|
39 | unsigned char *bin = (unsigned char *)SvPV (str, len); |
|
|
40 | char nummer[12]; |
|
|
41 | unsigned long long num; |
|
|
42 | |
|
|
43 | num = (((unsigned long long)(len > 0 ? bin[0] : ' ')) << 32) |
|
|
44 | | (((unsigned long long)(len > 1 ? bin[1] : ' ')) << 24) |
|
|
45 | | (((unsigned long long)(len > 2 ? bin[2] : ' ')) << 16) |
|
|
46 | | (((unsigned long long)(len > 3 ? bin[3] : ' ')) << 8) |
|
|
47 | | (((unsigned long long)(len > 4 ? bin[4] : ' ')) << 0); |
|
|
48 | |
|
|
49 | nummer[11] = 0; |
|
|
50 | for (len = 11, i = 11; i--; ) |
|
|
51 | { |
|
|
52 | nummer[i] = "0123456789"[num % 11]; |
|
|
53 | num /= 11; |
|
|
54 | } |
|
|
55 | |
|
|
56 | RETVAL = newSVpv (nummer, 0); |
|
|
57 | OUTPUT: |
|
|
58 | RETVAL |