Tôi đang làm bài tập về nhà cho lớp C++ của mình. Câu hỏi tôi đang làm về đọc như sau:Tích phân Byte hoán đổi trong C++
Viết hàm nhận một ký tự ngắn chưa ký (2 byte) và hoán đổi byte. Ví dụ, nếu x = 258 (00000001 00000010) sau khi hoán đổi, x sẽ là 513 (00000010 00000001).
Đây là mã của tôi cho đến nay:
#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;
}
và
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;
}
Mã của tôi có hai vấn đề tôi hy vọng bạn có thể giúp tôi giải quyết.
- Đối với một số lý do cả hai byte của tôi là 01000000
- Tôi thực sự không chắc chắn làm thế nào tôi sẽ trao đổi các byte. Giáo viên của tôi ghi chú về thao tác bit là rất bị hỏng và khó theo dõi và không có nhiều ý nghĩa với tôi.
Cảm ơn bạn rất nhiều trước. Tôi thực sự đánh giá cao việc bạn giúp tôi.
Khiếu nại về mã của bạn: 1) Tôi muốn tham khảo vượt qua ngắn nhập trực tiếp chứ không phải là một con trỏ. Như được viết, hàm của bạn cố gắng chỉnh sửa biến được truyền trong biến, điều này khá xấu xí. 2) Nếu bạn nhấn mạnh vào việc sửa đổi biến khi nó được truyền vào, tôi sẽ không bận tâm trả lại nó (điều này làm cho nó ngạc nhiên khi chức năng của bạn chỉnh sửa nó) và sẽ dùng tham chiếu thay vì truyền con trỏ. 3) Tôi muốn sử dụng các toán tử bit và chỉ sử dụng một mảng gồm hai byte ('char' hoặc' unsigned char'), thay vì lưu trữ từng bit trong một thời gian dài riêng biệt. – Brian
Xem thêm một câu hỏi có liên quan: http://stackoverflow.com/questions/3991478/building-a-32bit-float-out-of-its-4-composite-bytes-c – Brian