Целочисленная замена байтов в C ++ - PullRequest
7 голосов
/ 12 октября 2010

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

Напишите функцию, которая принимает unsigned short int (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. Я действительно не уверен, как бы я поменял байты. Мои заметки учителей о битовых манипуляциях очень разбиты и им трудно следовать, и они не имеют особого смысла для меня.

Большое спасибо заранее. Я действительно ценю, что вы помогаете мне.

Ответы [ 11 ]

0 голосов
/ 12 октября 2010

Это проблема:

byte2[i-8] = s;
cout << byte2[i];//<--should be i-8 as well

Это вызывает переполнение буфера.

Однако это не очень хороший способ сделать это. Посмотрите на операторы сдвига битов << и >>.

...