簡體   English   中英

反轉C中給定指針的字節的函數

[英]Function that reverse bytes of a given pointer in c

函數參數:1.空指針2.要反轉的值數(因為數組中有多個值)3.轉換為void的數據類型的大小。 函數的返回值應為int。

類型轉換將是用戶選擇要傳遞的整數,雙精度或字符的天氣。

我已經完成了代碼,直到函數中的指針應獲取用戶輸入的值為止。 當我選擇的是整數時,代碼可以正常工作,但是當我選擇的是兩倍時,我收到給pcTemp的值都為0。 獲得值后,我可以自己反轉地址。

我是c的新手,需要一點幫助。 代碼如下

int function(void* pPointer, int nSwapValue, int nTypeSize)
{
    int nCount = 0;
    int nQuotient = 0;
    int nIndex = 0;
    int nTemp = 0;
    int pIndex = 0;
    char *pTemp[128] = {0};
    unsigned char* pcTemp = NULL;

    if(pPointer == NULL)
    {
        printf("Error, Input string NULL");

        return 0;
    }

    pcTemp = (unsigned char*)pPointer;

    while(nCount < nSwapValue)
    {
        printf("Value : %x\n", pcTemp[nIndex]);

        nIndex = nIndex + nTypeSize;

        nCount++;

        nQuotient = pcTemp[nIndex];
    }

    return 1;
}

void main()
{
    int aNumber[128] = {0};
    double dNumber[128] = {0};
    void* pPointer = NULL;
    int nCount = 0;
    int nTotalValues = 0;
    int nChoice = 0;

    printf("What type of value do you want to enter ?\n");

    printf("Enter 1 for integer \nEnter 2 for Double\n");

    scanf_s("%d", &nChoice);

    printf("How many values do you want to enter ?\n");

    scanf_s("%d", &nTotalValues);

    //printf("Enter %d values \n", nTotalValues);

    for(nCount = 0; nCount < nTotalValues; nCount++)
    {
        printf("\nEnter value [%d] : ", nCount);

        if(nChoice == 1)
        {
            scanf("%d", &aNumber[nCount]);
            pPointer = &aNumber;
        }

        else
        {
            scanf("%f", &dNumber[nCount]);
            pPointer = &dNumber;
        }
    }

    function(pPointer, nTotalValues, sizeof(pPointer));

    return 1;

    getch();
}

原因之一是sizeof(pPointer)始終返回4 ,無論其指向的數據類型如何。

根據輸入的類型聲明一個變量以保持大小,並在for()循環中進行如下編輯,

同樣在閱讀double使用%lf

    int size = 0;

    for...............
    if(nChoice == 1)
    {
        scanf("%d", &aNumber[nCount]);
        pPointer = &aNumber;
        size = sizeof(int);
    }

    else
    {
        scanf("%lf", &dNumber[nCount]);         /* changed from %f to %lf*/
        pPointer = &dNumber;
        size = sizeof(double);
    }

並在調用函數時使用變量size

function(pPointer, nTotalValues, size);

Double在內存中的存儲方式與整數不同。
它會以指數形式存儲。 因此,當您嘗試使用char指針從double變量逐字節讀取時,您將僅讀取0

例如考慮:

int i = 100;
double d = 100;
char *c = NULL;

c = &i;    
printf("%x\n", *c);

c = &d;
printf("%x\n", *c);

輸出分別為640

暫無
暫無

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

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