將int
放入char
數組中的最佳方法(性能)是什麼? 這是我的當前代碼:將int轉換爲char數組的最佳方法
data[0] = length & 0xff;
data[1] = (length >> 8) & 0xff;
data[2] = (length >> 16) & 0xff;
data[3] = (length >> 24) & 0xff;
data
是char
陣列(共享PTR)和length
是int
。
將int
放入char
數組中的最佳方法(性能)是什麼? 這是我的當前代碼:將int轉換爲char數組的最佳方法
data[0] = length & 0xff;
data[1] = (length >> 8) & 0xff;
data[2] = (length >> 16) & 0xff;
data[3] = (length >> 24) & 0xff;
data
是char
陣列(共享PTR)和length
是int
。
你正在尋找的memcpy
char x[20];
int a;
memcpy(&a,x,sizeof(int));
你的解決方案也不錯,因爲它是endian safe。
在一個側面說明: -
雖然目前還沒有這樣的保證sizeof(int)==4
針對任何特定的實現。
memcpy endian安全嗎? –
@KacperFałat:是的,因爲它將來自source指向的位置的num個字節的值直接複製到目標指向的內存塊。 –
我還有一個問題,因爲我認爲該方法比手動複製快,所以有選擇返回表單字符數組int使用memcpy像函數? 有funcion返回與我的舊API,返回(無符號int)(數據[0]&0xff)| ((data [1]&0xff)<< 8)| ((data [2]&0xff)<< 16)| ((數據[3]&0xff的)<< 24); –
只需使用reinterpert cast。像使用int指針一樣使用數據數組。
char data[sizeof(int)];
*reinterpret_cast<int*>(data) = length;
BTW memcpy比這慢得多,因爲它使用循環逐字節複製。
在一個整數情況下,這只是一個簡單的分配。
數據有比4更多的值。 –
好吧。在sizeof(int)> 4'的平臺上失敗。你應該確保它不是。 OP代碼當然也是如此。 –
@KacperFałat數據大於4並不重要。它將reinterepert指針(數組的開頭),就好像它是一個整數指針。它也可以與偏移一起工作,就像Konrad所說的那樣,它只是將地址插入,就好像它是一個int的大小。 –
這是唯一的方法。理論上你可以使用memcpy
或reinterpret_cast
,但你不能因爲endians的問題。
理論上,*實際*。只要能夠保證字節順序(並且它可以在很多但不是全部的應用中),鑄造/複製方式是絕對安全的。 –
但是,在大多數平臺上更改endian的需求將不會提升性能。 –
這隻有在您將數據發送到其他計算機時才相關。只要它保持在同一臺機器上,它就是安全和高效的。對於很多事情來說,這完全夠用了。聲稱這種方式不能使用是不準確的。 –
這是最好的方法。我所知道的。 :) – hasan83
一個工會可以提供相同的功能,但要小心endianness:http://www.cplusplus.com/doc/tutorial/other_data_types/ – Aybe
「最優化」...? –