Last active
December 15, 2015 00:19
-
-
Save blackball/5171736 to your computer and use it in GitHub Desktop.
convert 32 bit long int or string to string or int.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* @TODO A simple optimization is to concatenate all sub strings into one big string. | |
| * this will save some memory and probably make accessing more efficient. | |
| */ | |
| /* char value to binary string look-up table, generated by Python */ | |
| static const char* _convTab[256] = { | |
| "00000000","00000001","00000010","00000011","00000100","00000101","00000110","00000111", | |
| "00001000","00001001","00001010","00001011","00001100","00001101","00001110","00001111", | |
| "00010000","00010001","00010010","00010011","00010100","00010101","00010110","00010111", | |
| "00011000","00011001","00011010","00011011","00011100","00011101","00011110","00011111", | |
| "00100000","00100001","00100010","00100011","00100100","00100101","00100110","00100111", | |
| "00101000","00101001","00101010","00101011","00101100","00101101","00101110","00101111", | |
| "00110000","00110001","00110010","00110011","00110100","00110101","00110110","00110111", | |
| "00111000","00111001","00111010","00111011","00111100","00111101","00111110","00111111", | |
| "01000000","01000001","01000010","01000011","01000100","01000101","01000110","01000111", | |
| "01001000","01001001","01001010","01001011","01001100","01001101","01001110","01001111", | |
| "01010000","01010001","01010010","01010011","01010100","01010101","01010110","01010111", | |
| "01011000","01011001","01011010","01011011","01011100","01011101","01011110","01011111", | |
| "01100000","01100001","01100010","01100011","01100100","01100101","01100110","01100111", | |
| "01101000","01101001","01101010","01101011","01101100","01101101","01101110","01101111", | |
| "01110000","01110001","01110010","01110011","01110100","01110101","01110110","01110111", | |
| "01111000","01111001","01111010","01111011","01111100","01111101","01111110","01111111", | |
| "10000000","10000001","10000010","10000011","10000100","10000101","10000110","10000111", | |
| "10001000","10001001","10001010","10001011","10001100","10001101","10001110","10001111", | |
| "10010000","10010001","10010010","10010011","10010100","10010101","10010110","10010111", | |
| "10011000","10011001","10011010","10011011","10011100","10011101","10011110","10011111", | |
| "10100000","10100001","10100010","10100011","10100100","10100101","10100110","10100111", | |
| "10101000","10101001","10101010","10101011","10101100","10101101","10101110","10101111", | |
| "10110000","10110001","10110010","10110011","10110100","10110101","10110110","10110111", | |
| "10111000","10111001","10111010","10111011","10111100","10111101","10111110","10111111", | |
| "11000000","11000001","11000010","11000011","11000100","11000101","11000110","11000111", | |
| "11001000","11001001","11001010","11001011","11001100","11001101","11001110","11001111", | |
| "11010000","11010001","11010010","11010011","11010100","11010101","11010110","11010111", | |
| "11011000","11011001","11011010","11011011","11011100","11011101","11011110","11011111", | |
| "11100000","11100001","11100010","11100011","11100100","11100101","11100110","11100111", | |
| "11101000","11101001","11101010","11101011","11101100","11101101","11101110","11101111", | |
| "11110000","11110001","11110010","11110011","11110100","11110101","11110110","11110111", | |
| "11111000","11111001","11111010","11111011","11111100","11111101","11111110","11111111", | |
| }; | |
| static inline void | |
| int_to_str(int i, char *str) { | |
| /* convert int to an binary form string @TODO consider the endianess */ | |
| const char *a = _convTab[ (i >> 24) & 0xFF ]; | |
| const char *b = _convTab[ (i >> 16) & 0xFF ]; | |
| const char *c = _convTab[ (i >> 8 ) & 0xFF ]; | |
| const char *d = _convTab[ (i >> 0 ) & 0xFF ]; | |
| while ( *str++ = *a++ ) ; str--; | |
| while ( *str++ = *b++ ) ; str--; | |
| while ( *str++ = *c++ ) ; str--; | |
| while ( *str++ = *d++ ) ; | |
| } | |
| static inline int | |
| str_to_int(const char *str) { | |
| /* convert 32 byte long str to an integer */ | |
| int i, s = 0; | |
| for (i = 0; i < 32; ++i) | |
| s += (str[i] - '0') << (31 - i); | |
| return s; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment