Estoy trabajando en una tarea para mi clase de C++. La pregunta en la que estoy trabajando dice lo siguiente:Intercambio de bytes enteros en C++
Escriba una función que toma un int corto sin signo (2 bytes) y cambia los bytes. Por ejemplo, si x = 258 (00000001 00000010) después del intercambio, x será 513 (00000010 00000001).
Aquí está mi código hasta ahora:
#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;
}
y
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;
}
Mi código tiene dos problemas que estoy esperando que usted puede ayudar a resolver.
- Por alguna razón mis dos bytes son 01 millones
- Realmente no estoy seguro de cómo iba a cambiar los bytes. Las notas de mis maestros sobre la manipulación de bits son muy rotas y difíciles de seguir y no tienen mucho sentido para mí.
Muchas gracias de antemano. Realmente aprecio que me hayas ayudado.
Las quejas sobre el código: 1) Me refiero pasar el corto directamente en lugar de como un puntero. Como está escrito, su función intenta editar la variable pasada, lo que es bastante feo. 2) Si insistes en modificar la variable a medida que se pasa, no me molestaría en devolverla (esto hace que sea sorprendente que tu función la edite) y usaría pasar por referencia en lugar de pasar un puntero. 3) Preferiría usar operadores de bits y simplemente usar una matriz de dos bytes ('char' o' unsigned char'), en lugar de almacenar cada bit en un largo separado. – Brian
Consulte también una pregunta algo relacionada: http://stackoverflow.com/questions/3991478/building-a-32bit-float-out-of-its-4-composite-bytes-c – Brian