我試圖交換前16位值的前8位和最後8位。例如,00000001 11001100變爲11001100 00000001;那麼我不知道如何實現它。我嘗試了不同的方式,但它不工作....任何幫助將不勝感激。對不起,如果這個問題很簡單。我剛開始學習點東西。感謝u.I有一個函數:交換16位值的前8位和後8位
unsigned short swap_bytes(unsigned short x) {
}
我試圖交換前16位值的前8位和最後8位。例如,00000001 11001100變爲11001100 00000001;那麼我不知道如何實現它。我嘗試了不同的方式,但它不工作....任何幫助將不勝感激。對不起,如果這個問題很簡單。我剛開始學習點東西。感謝u.I有一個函數:交換16位值的前8位和後8位
unsigned short swap_bytes(unsigned short x) {
}
unsigned short swap_bytes(unsigned short x) {
unsigned short result;
result = (x >> 8) | (x << 8);
return result;
}
瓦爾特
或者只是:'return(x >> 8)| (x << 8);' – lurker
@mbratch是的,但我想說得更清楚。 –
假設值是恰好16位。
unsigned short swap_bytes(unsigned short x)
{
unsigned short bitmask = 0x00FF;
unsigned short temp = x & bitmask;
x = x >> 8;
temp = temp << 8;
x = x | temp;
return x;
}
工作原理:
#include <bitset>
using namespace std;
int main()
{
typedef union{
unsigned char arr[2];
short s;
}SwapBit;
SwapBit sb;
sb.s = 100;
cout<<bitset<16>(sb.s)<<endl;
std::swap(sb.arr[0], sb.arr[1]);
cout<<bitset<16>(sb.s)<<endl;
}
結果是:
0000000001100100
0110010000000000
OP的標籤顯示他在使用C而不是C++。 – lurker
它看起來並不像你試過* *任何方式:-( –
http://msdn.microsoft.com/en-us /library/336xbhcz.aspx –
的typedef工會迷你 { 無符號字符b [2]; 無符號短S; }微; – Manuel