将二进制转换为12个字符,基数为36,左边是零填充的最有效的函数是什么?目前我已经想出了这个:
int transform_id (int64_t id_value, char* str) {
char num[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ??";
int i;
for (i = 11; i >= 0; id_value /= 36) {
str [i--] = num [id_value % 36];
}
str [12] = 0;
return (12);
}
...这似乎有效,但我不确定是否有一个更优越的方法O(n)明智
答案 0 :(得分:1)
好吧,表查找是我认为最快的方法。这个问题是基础的,因为它不是“比特对齐”。如果你的基数是2 ^ n,那么你可以使用按位移位和AND来获得指数,现在你必须使用除法并处理余数