首先,我們假設我有endian整理出來,並且知道先驗類型的大小。什麼是確定作爲二進制字符串給定類型的大小的有效方法?
我在做什麼:我有一個函數bs2i(char *bitStr)
,它接受一個表示signed char/short/int/long二進制數的字符數組。陣列可以有任何長度< = sizeof(long long)
。
我想要做的是採取bitStr [0]並將其設置爲符號位,以便它不會被截斷,如果我執行類似char val = bs2i("111")
。在這種情況下,函數應該返回-125,因爲這些位將被設置爲「000 ... 00010000011」。爲此,我需要知道最終類型需要多長時間,以便我可以將msb轉移到適當的位置。
這是我迄今:
size_t size = (((strlen(bitStr)-1)>>3)+1)<<3;
但我只是意識到,僅適用於字符和短褲。例如,一串長度爲的應該返回大小爲32,但只能用此方法返回24。有沒有一種有效的方法來確定合適的長度應該是什麼?
僅供參考,這裏是全功能:
long long bs2i(char *bitStr) {
long long val = 0l;
size_t len = (((strlen(bitStr) - 1) >> 3) + 1) << 3;
char msb = *bitStr & 1;
bitStr++;
while (*bitStr) {
val = (val << 1l) | (*bitStr & 1);
bitStr++;
}
val = (msb << len-1l) | val; /* Use MSB as sign bit */
return val;
}
加分,我想,如果有可以做到這一點並不需要類型大小的先驗知識的好方法。
**該數組的長度可以是任何長度<= sizeof(long long)。**這是錯誤的......限制是64個字節,如果我沒有弄錯的話,是LongLong的大小。我想重點是有一個限制。 –
@Ramhound是不是這意味着什麼?我所說的是,只要長度<=,字符串可以是任意大小。 –