вот какой-то новый тестовый код в отношении моей длинной проблемы. Я полагаю, что если я буду кодировать мои вещи так долго, это половина битвы при портировании. , другая половина должна была бы превратить его в большой endian, чтобы он мог работать на любой 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-битном окр к 64bit env. таким образом, это был один из способов изучения этой ситуации. , так что я думал, как это сделать. это пришло в голову. поэтому я тестировал его. типичный выходной байт выглядит так 22f6554c4341ef55c223d3d237f10cd0ff4ba48f положить, что в большой форме Endian и преобразования, что в десятичной системе, так что я может выводить х знаков после запятой из этой конечной продукции, что я пытаюсь сделать. – djones2010
Байт-массив не имеет шестнадцатеричных значений. Байт-массив имеет байты (целочисленные значения). Вы инициализируете свой массив шестнадцатеричными целочисленными литералами, но это ничем не отличается от инициализации его с помощью '{171, 50, 84, 205, 68}'. Если вы пытаетесь преобразовать 32-разрядное целое число в 64-битное целое число, то вы можете просто использовать (возможно, маскирование или использование неподписанных типов, если вы не хотите расширения знака). – jamesdlin