[英]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);
輸出分別為64
和0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.