char* test3(long num) {
char* buffer = (char*)malloc(11);
buffer[0] = '0';
buffer[1] = 'x';
buffer[10] = '\0';
char* temp = buffer + 2;
for (int i=0; i < 8; i++) {
temp[i] = (char)(num<<4*i>>28);
temp[i] = temp[i] >= 0 ? temp[i] : temp[i] + 16;
temp[i] = temp[i] < 10 ? temp[i] + 48 : temp[i] + 55;
}
return buffer;
char* buffer = (char*)malloc(11);
buffer[0] = '0';
buffer[1] = 'x';
buffer[10] = '\0';
char* temp = buffer + 2;
for (int i=0; i < 8; i++) {
temp[i] = (char)(num<<4*i>>28);
temp[i] = temp[i] >= 0 ? temp[i] : temp[i] + 16;
temp[i] = temp[i] < 10 ? temp[i] + 48 : temp[i] + 55;
}
return buffer;
}
temp[i] = (char)(num<<4*i>>28); 左移4i位 去掉高位的4i 右移28位 去掉右边的 这就获得4个bit
第一次是最高位32-29 4个bit 第二次 28-25 4个bit
temp[i] = temp[i] >= 0 ? temp[i] : temp[i] + 16;
然后因为它可能是个有符号的数 所以加上16 吧这个数变成0~15之间的正数
temp[i] = temp[i] < 10 ? temp[i] + 48 : temp[i] + 55;
然后<10 就是变成字符‘0’~‘9’ 所以加上48, 如果>=10 那就要用 'A'~'F'来表示
所以加上55, 因为'A'变成整数正好是65