Целочисленная подмена байтов в C ++

Я работаю над домашним заданием для моего класса C ++. Вопрос, над которым я работаю, гласит следующее:

Напишите функцию, которая принимает беззнаковое короткое целое число (2 байта) и меняет местами байты. Например, если x = 258 (00000001 00000010) после обмена, x будет 513 (00000010 00000001).

Вот мой код на данный момент:

#include <iostream>

using namespace std;

unsigned short int ByteSwap(unsigned short int *x);

int main()
{
  unsigned short int x = 258;
  ByteSwap(&x);

  cout << endl << x << endl;

  system("pause");
  return 0;
}

и

unsigned short int ByteSwap(unsigned short int *x)
{
  long s;
  long byte1[8], byte2[8];

  for (int i = 0; i < 16; i++)
  {
    s = (*x >> i)%2;

    if(i < 8)
    {
      byte1[i] = s;
      cout << byte1[i];
    }
    if(i == 8)
      cout << " ";

    if(i >= 8)
    {
      byte2[i-8] = s;
      cout << byte2[i];
    }
  }

  //Here I need to swap the two bytes
  return *x;
}   

У моего кода есть две проблемы, я надеюсь вы можете помочь мне решить.

  1. По какой-то причине оба моих байта равны 01000000
  2. Я действительно не уверен, как бы мне поменять местами байты. Заметки моих учителей о манипуляциях с битами очень нечеткие, их трудно понять, и они не имеют для меня особого смысла.

Заранее большое спасибо. Я действительно ценю вашу помощь.

7
задан athspk 29 September 2012 в 04:19
поделиться