簡體   English   中英

將int值插入char類型指針

[英]Insterting an int value into a char type pointer

因此,我想做一個自定義的內存分配器,在這里您基本上輸入了一定大小的字節,並且創建了一個由N個字節組成的巨大空間。 一切工作正常,除了我需要輸入一個int並將其顯示為4字節(十六進制)。 例如:

如果我有 :

unsigned char* char_pointer = (unsigned char*)malloc(4*sizeof(uint8_t));
int value = 500;
for(int i =0 ; i<8;i++){
   printf("%02X ", *(char_pointer+i))
}

所以這將顯示

00 00 00 00

到現在為止還挺好。 但是,如果我想這樣做,例如:

*char_pointer = value;

它將顯示

F4 00 00 00

我真正想要顯示的是:

F4 01 00 00

因為int的值為500,十六進制為1F4。 我將如何處理?

在此語句中: *char_pointer = value;

左值和右值的類型不匹配。 unsigned char最多可容納255

編譯器將在此處進行隱式類型轉換 因此,只有一個字節將被復制到char pointer存儲區中。

我正在展示一種骯臟的非便攜式方式來執行您想要的操作:

*((unsigned int*)char_pointer) = value

它被強制轉換為char。 嘗試

*(int*)char_pointer = value;

(可選)您可以顯式寫入字節:

*(char_pointer+0) = *(((char*)(&value))+0)
*(char_pointer+1) = *(((char*)(&value))+1)
*(char_pointer+2) = *(((char*)(&value))+2)
*(char_pointer+3) = *(((char*)(&value))+3)

使用memcpy()並讓一個好的編譯器對其進行優化。

unsigned char* char_pointer = malloc(sizeof value);
memcpy(char_pointer, &value, sizeof value); 

您不能使用*char_pointer = value; 如果該value大於255。

您將不得不想出一種算法來分配指針。

例如

tempvalue = value;
for (i=0; i<4; i++)
{
    char_pointer[i] = (char) tempvalue;
    tempvalue /= 256;
}

暫無
暫無

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

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