2010-06-30 68 views
1

如何將無符號長數組轉換爲C++中的字節?我正在開發使用VS2008 C++。如何將無符號長數組轉換爲C++中的字節?

編輯:

我需要評估這個轉換數字的大小,我想分這多頭排列爲29byte陣列。例如
我們有long array = 12345;
它應該轉換爲字節,然後我需要它的長度分爲29,看看有多少數據包。

丟失數據很重要,但現在我只想得到結果。

+1

請進一步解釋。你需要複製它,還是足夠使用'char *'來訪問原始數組?你需要改變字節序嗎? – 2010-06-30 03:19:56

+0

當然有一個原因,它是'長'?您可能會丟失數據。你能解釋一下你想要達到的目標嗎? – Mawg 2010-06-30 03:26:35

+0

像馬修說:我們在這裏做什麼?我們正在進行某種下采樣?我們是否序列化爲字節流以便在網絡/文件/等上輸出? – Thanatos 2010-06-30 03:27:57

回答

2
long array[SOME_SIZE]; 
char* ptr = reinterpret_cast<char*>(array); // or just (char*)array; in C 

// PC is little-endian platform 
for (size_t i = 0; i < SOME_SIZE*sizeof(long); i++) 
{ 
    printf("%x", ptr[i]); 
} 

這兒有你更強大的解決方案,沒有字節序(這並不能掩蓋怪異的DSP器件,其中char可以是32位的實體,這些都是特殊):

long array[SOME_SIZE]; 

for (size_t i = 0; i < SOME_SIZE; i++) 
{ 
    for (size_t j = 0; j < sizeof(long); j++) 
    { 
     // my characters are 8 bit 
     printf("%x", ((array[i] >> (j << 3)) & 0xff)); 
    } 
} 
+0

請注意,ptr中的數據在little-endian機器上只是小端:這種解決方案將導致big-endian機器上的big-endian輸出,以及little endian機器上的little-endian輸出。瞭解endian-ness的含義,如果endian - ness重要,尋求一個更強大的解決方案。 – Thanatos 2010-06-30 03:33:48

+0

感謝您的解決方案,我希望它的工作,但你會幫助我,我怎麼可以計算它有多少字節?另一方面,例如10等於1001,所以它是4字節 – Amir 2010-06-30 04:02:51

+0

你可以用'j * CHAR_BIT'替換'j << 3',用'((1 << CHAR_BIT) - 1)'。你需要爲此包括''。 – 2010-06-30 08:16:19

相關問題