題目描述
在計算機系統內存在兩種字節序:大端和小端
大端(Big_Endian)就是高位字節排放在內存的低地址端,低位字節排放在內存的高地址端。
小端(Little_Endian)就是低位字節排放在內存的低地址端,高位字節排放在內存的高地址端。
以數字0x12345678為例:
大端(Big_Endian)低地址到高地址依次為“0x12 | 0x34 | 0x56 | 0x78”
小端(Little_Endian)低地址到高地址依次為“0x78 | 0x56 | 0x34 | 0x12”
現定義一種字符編碼,其編碼格式如下:
9個字符為一個編碼組
第一個字符表示后續8個字符的字節序(字符‘0’表示小端,字符‘1’表示大端)
后續8個字符,每個字符代表一個字節
編碼解析之后字符串采用大端模式
輸入描述:
第一行為數字N,表示后續輸入的字符串有多少個編碼組
第二行為編碼字符串
輸出描述
輸出為一行,包含N個編碼組解析結果(大端模式),每個結果以一個空格分隔,行末無空格。
示例1
輸入
2
0abcdefgh1abcdefgh
輸出
hgfedcba abcdefgh
1.思考
- 當每個編碼組以‘0’開頭,則之后8個字符串逆序輸出;
- 當每個編碼組以‘1’開頭,則之后8個字符串順序輸出;
- 注意輸出的空格和換行符。
2.實現
#include <iostream>
#include <string>
#include<algorithm>
using namespace std;
string LittleEndian(string& s)
{
int len = s.size();
string res;
res = s;
for (int i = 0; i < len; i++){
res[i] = s[len - 1 - i];
}
return res;
}
int main(){
int n;
string input, res;
while (cin>>n>>input){
int f;
string s;
for (int i = 0; i < n; i++){
f = input[i * 9] - '0';
s = input.substr(i*9+1, 8);
if (f == 0){
res = LittleEndian(s);
cout << res;
}
else{
cout << s;
}
if (i < n-1){
cout << " ";
}
else{
cout << endl;
}
}
}
return 0;
}