0
我正在與一個字節尋址的陣列工作ParameterArray [20],其具有不同長度的多個連續的參數:提取特定位
ParameterA: Start = 0; Length = 2
ParameterB: Start = 2; Length = 1
ParameterC: Start = 3; Length = 6
...
我想建立一個函數,如下所示:
int ExtractedData(startBit, endBit, ParameterStart)
{
return (ParameterArray[ParameterStart] >> endBit) && 2^startBit;
}
上面但是不會工作,如果我超過8位,或例如,如果我想多字節參數的中間位(即比特17:5參數C的)
任何建議關於如何實現這個?
編輯:我修改我的函數如下,但我仍然爲int的大小與此實現限制:
int ExtractedData(startBit, endBit, ParameterStart, parameterLength)
{
int tempVar = 0;
for (int i=0; i < parameterLength; i++) {
tempVar = (tempVar << 8 | ParameterArray[ParameterStart+ i];
}
return (tempVar >> endBit) & ((1 << (startBit - endBit + 1)) - 1);
}
我修復了你提到的那兩個錯誤,但是你對如何擴展它來處理多字節參數有什麼建議嗎? – spizzak
需要返回的最大位寬是多少?例如。它總是適合32位int嗎? –
我已經做了修改,以便它能夠處理高達32位的int,但我不確定它的效率。我有時也需要返回多達6個字節,但如果沒有更好的方法來處理它,最終我可以解決這個問題。 – spizzak