49 lines
1.1 KiB
C++
49 lines
1.1 KiB
C++
|
#include<iostream>
|
|||
|
#include<algorithm>
|
|||
|
#include<cstring>
|
|||
|
using namespace std;
|
|||
|
void str_to_unicode(const char *input, uint8_t *output) {
|
|||
|
uint16_t unicode;
|
|||
|
uint8_t *ptr = output;
|
|||
|
while (*input) {
|
|||
|
// UTF-8 ת Unicode<64><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|||
|
if ((*input & 0xE0) == 0xE0) { // 3<>ֽ<EFBFBD>UTF-8<>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>
|
|||
|
unicode = ((input[0] & 0x0F) << 12) | ((input[1] & 0x3F) << 6) | (input[2] & 0x3F);
|
|||
|
input += 3;
|
|||
|
} else if ((*input & 0xC0) == 0xC0) { // 2<>ֽ<EFBFBD>UTF-8<>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|||
|
unicode = ((input[0] & 0x1F) << 6) | (input[1] & 0x3F);
|
|||
|
input += 2;
|
|||
|
} else { // 1<>ֽ<EFBFBD>ASCII<49>ַ<EFBFBD>
|
|||
|
unicode = *input;
|
|||
|
input += 1;
|
|||
|
}
|
|||
|
// ת<><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UTF-16BE<42><45>
|
|||
|
*ptr++ = (unicode >> 8) & 0xFF;
|
|||
|
*ptr++ = unicode & 0xFF;
|
|||
|
}
|
|||
|
*ptr = '\0'; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
}
|
|||
|
int main()
|
|||
|
{
|
|||
|
int n;
|
|||
|
// string s;
|
|||
|
uint8_t a[10005];
|
|||
|
char s[100005];
|
|||
|
// cin>>s;
|
|||
|
scanf("%s",s);
|
|||
|
int i=-1;
|
|||
|
char sc[1005];
|
|||
|
str_to_unicode(s,a);
|
|||
|
for(int i=0;i<=100;i++)
|
|||
|
{
|
|||
|
printf("%X",a[i]);
|
|||
|
}
|
|||
|
while(s[++i])
|
|||
|
{
|
|||
|
sprintf(sc+i*4,"00%X",s[i]);
|
|||
|
printf("00%X",s[i]);
|
|||
|
}
|
|||
|
printf("\n%s",sc);
|
|||
|
|
|||
|
}
|