为什么stroull()不能处理具有十六进制值的字节数组?
这里有一些关于我的长期问题的新测试代码。
我认为如果我长时间编码我的东西那么这就是移植的一半。
另一半是将其变成大端,因此它可以在任何64位系统上运行。
所以我做了以下事情:
#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字节的阵列上运行。我也不确定如何使用指针来做到这一点。我想我需要一个长长指针数组来存储所有这些东西,然后在每个指针上调用byteswap来交换每个指针中的值。我个人还没有通过sizeof(long)进行指针递增,以便之前递增。
没有找到相关结果
已邀请:
5 个回复
悍蕾驮苇袜
不是字符串。它只是一个包含5个值的数组。 试试这个:
方案产出: ab3254cd44
薄响
(除了你需要再添加三个字节,并使整个数组8字节对齐)。
宠封钞轰
吠强祷豪硅
填盖