這可能是你在追求什麼。
int get_value_from_array(char* buffer, int byte1, int byte2)
{
int j = 0;
assert(buffer != 0);
assert(byte1 >= 0 && byte2 >= byte1 && (size_t)(byte2 - byte1) < sizeof(int));
for (int i = 0; i < byte2 - byte1; i++)
j += (unsigned char)buffer[byte1+i] << (i*8);
return j;
}
正如我的評論所指出的,你真的不希望分配int *j
出於多種原因,包括「你是不是允許使用malloc()
」和「當在你的問題誤用它泄漏內存」。
而且,老實說,在我看到您的問題更新之前,我寫了這段代碼! assert()
和(unsigned char)
轉換是您的原始代碼和此代碼之間的唯一區別。我不確定你如何得到浮點異常。如果你除以零,你可以得到其中的一個,但是在你的代碼中沒有明顯的分割,更不用說被零除。
您應該回到原始代碼並在運行時打印所有信息。或者使用調試器來完成它。
int get_value_from_array(char* buffer, int byte1, int byte2)
{
int j = 0;
printf("-->> %s: %p (%d..%d)\n", __func__, buffer, byte1, byte2);
assert(buffer != 0);
assert(byte1 >= 0 && byte2 >= byte1 && (size_t)(byte2 - byte1) < sizeof(int));
for (int i = 0; i < byte2 - byte1; i++)
{
printf("j0 = 0x%.8X, i = %d, byte = 0x%.2X, "
"add = 0x%.8X, j1 = 0x%.8X\n",
j, i, (unsigned char)buffer[byte1+i],
(unsigned char)buffer[byte1+i] << (i*8),
j + (unsigned char)buffer[byte1+i] << (i*8));
j += (unsigned char)buffer[byte1+i] << (i*8);
}
printf("<<-- %s: 0x%.8X\n", __func__, j);
return j;
}
請注意,打印以換行符結束。在C99中,__func__
是該函數的名稱;如果您有C89/C90,則省略,然後刪除%s
—或用您的函數名稱替換%s
(或用您的函數名稱替換爲__func__
作爲字符串文字:"get_value_from_array"
)。
調試代碼寫在C89/C90:
int get_value_from_array(char* buffer, int byte1, int byte2)
{
static const char func[] = "get_value_from_array";
int i;
int j = 0;
printf("-->> %s: %p (%d..%d)\n", func, buffer, byte1, byte2);
assert(buffer != 0);
assert(byte1 >= 0 && byte2 >= byte1 && (size_t)(byte2 - byte1) < sizeof(int));
for (i = 0; i < byte2 - byte1; i++)
{
printf("j0 = 0x%.8X, i = %d, byte = 0x%.2X, "
"add = 0x%.8X, j1 = 0x%.8X\n",
j, i, (unsigned char)buffer[byte1+i],
(unsigned char)buffer[byte1+i] << (i*8),
j + (unsigned char)buffer[byte1+i] << (i*8));
j += (unsigned char)buffer[byte1+i] << (i*8);
}
printf("<<-- %s: 0x%.8X\n", func, j);
return j;
}
目前尚不清楚你想要做什麼,而是'的malloc(的sizeof(int)的)'看起來並不像它足夠的空間。 –
您能否提供緩衝區,字節1,字節2和預期j的樣本數據?另外,j是一個指向int的指針,你想要返回j的值嗎?對於這個問題,你爲什麼動態分配j? – dsolimano
@iharob tbh我剛剛按照鏈接上的例子。 –