首页 > 学院 > 开发设计 > 正文

不知道取什么名字,留坑

2019-11-06 06:11:48
字体:
来源:转载
供稿:网友
#include <iostream>#include <vector>#include <numeric>#include<limits>#include <cctype>#include <sstream>using namespace std;char trans(char c){ if (isdigit(c)) return c - '0'; else if (c >= 'A' && c <= 'Z') return c - 'A' + 10; else if (c >= 'a' && c <= 'z') return c - 'a' + 10;}/** 请完成下面这个函数,实现题目要求的功能 **/ /** 当然,你也可以不按照这个模板来作答,完全按照自己的想法来 ^-^ **/string Decode(string in) { int cnt = 0; char byte[50]; /* 需要使用unsigned char */ int k = 0; int res = 0; /* 十六进制转二进制 */ for (int i = 0; i < in.size(); i+=2) { byte[k++] = trans(in[i]) * 16 + trans(in[i+1]); } for (int i = 0; i < k; i++) cout << (int)byte[i] << endl; //while (1) ; /* 测试 */ unsigned char tst = 0x80; while (tst & byte[0]) { tst = tst >> 1; cnt++; } if (cnt != k) return "false"; for (int i = 1; i < cnt; i++) if ((byte[i] & 0x80) != 0x80) return "false"; /* 解码 */ /* 处理第一个字节 */ tst = 0x80; int m = cnt; while (cnt > 1) { /* 这里应该使用m, 忘记改了 */ tst = (tst >> 1) || tst; /* 这里使用位运算与但是我使用了逻辑与 */ cnt--; } res = res * 16 + (byte[0] & (~tst)); for (int i = 1; i < cnt; i++) { res = res * 16 + (byte[i] & (~(0xC0))); } stringstream ss; ss << res; string ans; ss >> ans; return ans;}int main() { string res; string _in; getline(cin, _in); res = Decode(_in); cout << res << endl; return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表