所以我在C字符數組...例如:添加的int字符數組
uchar arr[3] = { 0x34, 0x45, 0xFF }
我正在尋找一個快速的方式爲整數添加到它(像其0x3445FF),所以例如如果我加2 arr中我得到:
{ 0x34, 0x46, 0x01 }
所以我在C字符數組...例如:添加的int字符數組
uchar arr[3] = { 0x34, 0x45, 0xFF }
我正在尋找一個快速的方式爲整數添加到它(像其0x3445FF),所以例如如果我加2 arr中我得到:
{ 0x34, 0x46, 0x01 }
最簡單和最好的方法是轉換爲int,然後再轉換回來。此外,你需要決定字節順序,因爲它從來不清楚。
此代碼假定大端,即陣列最初持有數量0x3445ff:
uint8_t arr[] = { 0x34, 0x45, 0xff };
uint32_t x = (arr[0] << 16) | (arr[1] << 8] | arr[2];
x += 2;
arr[0] = (x >> 16) & 0xff;
arr[1] = (x >> 8) & 0xff;
arr[2] = x & 0xff;
所需的字節順序隱含在問題中,與您在此處所見的一樣。無論自然字節順序執行平臺如何,代碼都可以工作。我認爲這是點平臺獨立的字節排序? – Clifford
也許環路
int index = last_valid_index;
while(index >= 0 && addend > 0) {
addend += array[index];
array[index] = addend;
addend >>= 8;
--index;
}
足夠快?
這很聰明!感謝您的展示。 – unwind
這是C.您可以將字符數組可能強制轉換爲整數數組和直接分配,像
uchar arr[20];
((int *)arr + index/sizeOf(int)) = your_int;
但是,大小,低/大端等等將取決於int在您的平臺上的表示方式。這可能會導致可移植性問題。另外請注意,從00到FF的所有值都是可能的。例如,如果您稍後使用空終止符,則中間的00將爲您創建一個問題。另外,在我的示例代碼中,整數表示將sizeOf(int)對齊。
我會在我回家時嘗試這個...我在OpenCL C(內核)中這樣做,所以便攜性不應該成爲問題! – Veles
手動將初始數組轉換爲int,添加,轉換回來。 – pmg
有沒有數組長度的特定範圍?我認爲,可能會進行一些惡意的比特級黑客攻擊。還有你的CPU類型? –
@pmg要小心字節順序。 –