这里是一些关于我的长期问题的新测试代码。 我想,如果我长时间编码我的东西,那么这是移植的一半战斗。另一半是将其变成大端,这样它就可以在任何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