我有一個8字節的數組,我試圖將它轉換爲C++中的一個長符號,似乎無法弄清楚。從我可以告訴長整數只有4個字節,任何人都可以提供這方面的一些信息?如果它是32位或64位,會不會很重要?將8個字節的數組轉換爲C++中的長符號
回答
你可能應該使用int64_t
這是保證是8字節長。
你沒有說明你的數據如何被表示(它的字節順序)到你的數組中,但你可能使用reinterpret_cast<>
甚至更好:使用移位操作來「建立」你的整數。
喜歡的東西:
unsigned char array[8] = { /* Some values here */ };
uint64_t value =
static_cast<uint64_t>(array[0]) |
static_cast<uint64_t>(array[1]) << 8 |
static_cast<uint64_t>(array[2]) << 16 |
static_cast<uint64_t>(array[3]) << 24 |
static_cast<uint64_t>(array[4]) << 32 |
static_cast<uint64_t>(array[5]) << 40 |
static_cast<uint64_t>(array[6]) << 48 |
static_cast<uint64_t>(array[7]) << 56;
「長」至少有4個字節長。它可以更多。很多,更多。 – aib 2010-11-10 08:00:15
@aib:我在我的例子中使用了'uin64_t',而不是'long'。爲什麼downvote? – ereOn 2010-11-10 08:01:00
你做了,但你改變了你的答案。聰明:) – thomaspaulb 2010-11-10 08:02:54
只有C99保證了持有的64位信息類型 - long long
和int*64_t
。對於C++,你應該尋找一個BigInt類/庫。或者,如已經建議的那樣,使用兩個long
s來滾動你自己的班級。
另一種在數據類型之間進行轉換的方式,在某些情況下我覺得很方便,就是使用union數據類型,它允許您訪問與不同數據類型相同的內存部分。當然,關於字節順序,數據類型大小等的所有其他評論仍然存在。
例如:
union bytes {
unsigned char c[8];
uint64_t l;
} myb;
myb.c[0] = 0;
myb.c[1] = 1;
myb.c[2] = 0;
myb.c[3] = 0;
myb.c[4] = 0;
myb.c[5] = 0;
myb.c[6] = 0;
myb.c[7] = 0;
cout << "value of myb.l: " << myb.l << "\n";
- 1. 轉換爲C字節數組長長
- 2. 將DWORD字節數組轉換爲無符號長數
- 3. 如何將無符號長數組轉換爲C++中的字節?
- 4. 將無符號長整數的每個字節轉換爲無符號字符數組的元素
- 5. 將8個字節轉換爲帶符號的長整型(64位)
- 6. 將.NET long轉換爲無符號的8字節整數
- 7. 將字節數組轉換爲VB6中的帶符號整數
- 8. 將字節數組轉換爲C#中的字符串
- 9. 將字節數組轉換爲C中的字符串#
- 10. 如何將字符串轉換爲C#中的字節數組?
- 11. 將C#字節數組轉換爲C++
- 12. 使用UTF-8將單個字節從字節數組轉換爲字符串
- 13. C#將字節字符串轉換爲字節數組
- 14. 將UTF-8字符串轉換爲字節長度32
- 15. 將無符號字節數組轉換爲Structs數組
- 16. C#將字節數組與字符串轉換爲字符串
- 17. 將字節數組轉換爲字符串的字節數
- 18. 將NULL字節的C字符串轉換爲char數組
- 19. 將字符串數組(字節值)轉換爲字節數組
- 20. 將8字節的uint8_t數組轉換爲4字節的數組
- 21. 將字節8字符的numpy數組轉換/解碼爲字符串
- 22. 將C#字節數組轉換爲VB.NET
- 23. C:將字節數組轉換爲struct
- 24. 在C++中將無符號字符(字節)數組轉換爲無符號短符號
- 25. 如何將少於8個字節轉換爲C#中的ulong?
- 26. 將字符串轉換爲更長的字節數組中的ascii
- 27. 如何將struct數組轉換爲c#中的字節數組?
- 28. 如何將字節數組轉換爲C#中的雙數組?
- 29. 將Java字符串轉換爲16字節的字節數組
- 30. 將8個字節轉換爲一個長
發表更多你想要實現的,可能用一個例子什麼位。 – 2010-11-10 07:49:45
另請參閱:http://stackoverflow.com/questions/271076/what-is-the-difference-between-an-int-and-a-long-in-c和http://stackoverflow.com/questions/ 589575/c-size-of-int-long- – thomaspaulb 2010-11-10 07:59:45
儘管它們通常僅適用於16位和32位值,但您可能會發現與「ntohl」系列函數有一些相似之處。對於Linux/GCC,它們是通過位/ byteswap.h實現的,該位也具有__bswap_64,儘管這非常不標準,但它說明了對英特爾的bswap彙編語言指令的使用,以及針對較舊的CPU的rorw/rorl。在FreeBSD上,有一個sys/endian.h頭文件。 – 2010-11-10 08:15:10