這裏是一些關於我的長期問題的新測試代碼。 我想,如果我長時間編碼我的東西,那麼這是移植的一半戰鬥。另一半是將其變成大端,這樣它就可以在任何64位系統上工作。 ,所以我做了以下內容:爲什麼stroull()不適用於具有十六進制值的字節數組?
#include <iostream>
#include "byteswap.h"
#include "stdlib.h"
using namespace std;
int main()
{
char bytes[6] = {0x12,0x23,0xff,0xed,0x22,0x34};
//long *p_long = reinterpret_cast<long*> (bytes);
long long *p_long = reinterpret_cast<long long*> (bytes);
std::cout<<"hex="<<std::hex<<*p_long<<"LE"<<std::endl;
*p_long = bswap_64(*p_long);
std::cout<<"hex="<<std::hex<<*p_long<<"BE"<<std::endl;
return 0;
}
這在我看來,這樣做的最簡單的方法。現在的問題是在使用BSWAP ...我得到下面的輸出
十六進制= 34563422edff2312LE 十六進制= 0BE
我得到了第一個爲LE所有字節。但現在看來64位交換功能不起作用。我認爲這將解決我遇到的問題。
考慮到我將操作一個20字節的數組。我也不知道我會如何使用指針來做到這一點。我想我需要一個長長的指針數組來存儲所有這些東西,然後調用每個字節的交換來交換每個指針的值。我個人還沒有通過sizeof(long)來增加指針的增量。
我想我是試圖採取的字節數組有十六進制值在32位ENV運行到64位環境。所以,這是探索這種情況的方法之一。 所以我在想如何做到這一點。這讓我想起了。所以我正在測試它。 典型的字節輸出看起來像這樣 22f6554c4341ef55c223d3d237f10cd0ff4ba48f 將在大端形式,並且該轉換成十進制,所以我可以從最終輸出輸出x小數是什麼,我試圖做的。 – djones2010 2010-01-13 18:05:50
一個字節數組沒有十六進制值。一個字節數組有字節(整數值)。你恰好在用十六進制整數文字初始化你的數組,但它與使用'{171,50,84,205,68}'初始化它沒有什麼不同。如果你試圖將一個32位整數轉換爲64位整數,那麼你可以投射(如果你不想簽名擴展,可能會掩蓋或使用無符號類型)。 – jamesdlin 2010-01-13 19:14:10