簡體   English   中英

使用位掩碼將十進制轉換為十六進制並在C中移位

[英]converting decimal to hex using bitmask and shift in C

我一直在我的代碼中存在分段錯誤的麻煩。 我正在嘗試制作一個將十進制數字轉換為十六進制數字的函數。 另外,如果我要使用:15&15,數字是1111還是15?

這是我的代碼:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

char *to_hex(int n);

main(){
    int dec;
    printf("-> ");
    scanf("%d",dec);
    printf(to_hex(dec));
}

char *to_hex(int n){
    char *array = malloc(sizeof(int)*2+8);/*makes array*/
    int i;
    int index=0;/*used for storing into array*/
    for(i=28;i>-1;i=i-4){/*mask and compare 8 times*/
        int shift=n>>i;/*right shift*/
        int mask=shift&15;/*masks*/
        if (mask<10){
            *(array+index)=(char)mask;
            index++;
        }
        else{
            switch(mask){
            case 10:
                *(array+index)='a';
                index++;
                break;
            case 11:
                *(array+index)='b';
                index++;
                break;
            case 12:
                *(array+index)='c';
                index++;
                break;
            case 13:
                *(array+index)='d';
                index++;
                break;
            case 14:
                *(array+index)='e';
                index++;
                break;
            case 15:
                *(array+index)='f';
                index++;
                break;
            }
        }
    }
    *(array+index)='\0';
    return array;
}

我認為:int mask:等於15而不是1111我正確嗎? 謝謝

您可以通過更改scanf("%d",dec);來避免段錯誤scanf("%d",dec); scanf("%d",&dec); ,如果需要可打印的結果,請更改*(array+index)=(char)mask; *(array+index)=(char)mask+'0'; (或者更好的是, array[index] = mask + '0';

printf(to_hex(dec)); 也有點無聊。 使用printf("%s",to_hex(dec)); 代替; 更安全。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM