Следующий код (на C++) должен получить некоторые данные вместе с его размером (в байтах) и вернуть строку, содержащую шестнадцатеричный код. size
- размер блока памяти с его местоположением, хранящимся в val
.Почему функция показывает шестнадцатеричный код в обратном порядке?
std::string byteToHexString(const unsigned char* val, unsigned long long size)
{
unsigned char temp;
std::string vf;
vf.resize(2 * size+1);
for(unsigned long long i= 0; i < size; i++)
{
temp = val[i]/16;
vf[2*i] = (temp <= 9)? '0' + temp: 'A' + temp - 10; // i.e., (10 = 9 + 1)
temp = val[i] % 16;
vf[2*i+1] = (temp <= 9)? '0' + temp: 'A' + temp - 10; // i.e., (10 = 9 + 1)
}
vf[2*size] = '\0';
return (vf);
}
Так на выполнение вышеуказанной функции следующим образом:
int main()
{
unsigned int a = 5555;
std::cout << byteToHexString((unsigned char*)(&a), 4);
return 0;
}
Выход мы получаем это:
B3150000
Не следует вывод, а быть 000015B3
? Так почему это отображение в обратном порядке? Что-то не так с кодом (я использую компилятор g ++ в Ubuntu)?
Является ли эта архитектура платформы специфичным или специфический компилятор? Извините за этот глупый вопрос ... – Sreram
Это характерная для архитектуры. В наши дни большинство компьютеров общего назначения малоподвижны. Обратите внимание, что компилятор знает, на какую архитектуру нацеливается, и поэтому во время компиляции можно проверить проверку подлинности. – paddy