进制间的转换还需加深思考!
#include <iostream>
#include<bits/stdc++.h>
using namespace std;

char change(char ch){
int num = -1;
    if(ch >= '0' && ch <= '9') //数字
        num = ch - '0';
    else if( (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F')) //字母
        num = tolower(ch) - 'a' + 10; //十六进制字母转为十进制数
    if(num != -1){ //非数字或者字母num还是为-1
        int bit[4];   // 16以内,4位
        for(int i = 0; i < 4; i++){
            bit[i] = num % 2;  // 从下标0开始存,已经反转了
            num /= 2;
        }
         num = bit[0] * 8 + bit[1] * 4 + bit[2] * 2 + bit[3] * 1;  // 这个数的范围是在0-16之间,用16进制表示它
         if(num <= 9 && num >= 0) //转回十六进制数的字符
             ch  =  num + '0';
         else if (num >= 10 && num <= 16)
             ch = num - 10 + 'A';
    }
    return ch;
}

int main() {
    string s1,s2,s;
    cin>>s1>>s2;
    s=s1+s2;
    string even,odd;
    for(int i=0;i<s.size();i++){
        if(i%2==0)
            even+=s[i];
        else
            odd+=s[i];
    }
    sort(even.begin(), even.end()); //奇数位字符排序
    sort(odd.begin(), odd.end()); //偶数位字符排序
    int j=0;
    for(int i=0;i<s.size();i++){
        if(i%2==0)
            s[i]=even[j];
        else    
            s[i]=odd[j++];
    }
    for(int i = 0; i < s.length(); i++) //遍历字符串
            s[i] = change(s[i]);
        cout << s << endl;
    
    return 0;
}
// 64 位输出请用 printf("%lld")