首页 > 编程知识 正文

怎么把字符数字转换成int型,如何将unsigned转换成int

时间:2023-05-04 16:56:27 阅读:225763 作者:1869

/*题目4:(简答题:10.0分)
实现函数将点分十进制表示的字符串转换为 unsigned int 整型数值
unsigned int my_ResDotDec(const char *strip);
参数说明:strip 点分十进制表示的字符串;
示例: strip =“128.11.3.31” ; 返回值: 2148205343;
strip =“128.399.2.12” ; 返回值为 UINT_MAX

#include <iostream>#include <ctype.h>#include <limits.h>#include <stack>using namespace std;//处理单个atoiint my_atoi_single(const char p){ return p - '0';}//atoi的子函数,将进制,字符,符号传递进来unsigned int my_atoi_Son(const char *p,int system){ stack<char> sta; unsigned int sum = 0; unsigned int tmp = 0; while(isdigit(*p)) { sta.push(*p); p++; } int n = sta.size(); for(int i = 0; i < n;++i) { tmp = my_atoi_single(sta.top()); sta.pop(); for(int j = 0;j < i;++j) { tmp = tmp * system; } sum += tmp; } return sum; }unsigned int my_atoi(const char *str){ unsigned int integer = 0; int system = 10; const char * p = str; if(!isdigit(*p)) { throw exception("输入的字符串,无法进行atoi!"); } integer = my_atoi_Son(p,system); return integer;} void DDN_to_UIN_Son(char *str,char *des,int i,int n){ char * p = des; char * q = str; p = p + (i * 8) + 8 - n; while(n--) { *p++ = *q++; }}//二进制字符串转成无符号整型unsigned int zrdnyChar_to_UIN(const char *buffers){ stack<char> sta; unsigned int sum = 0; unsigned int tmp = 0; const char * p = buffers; int i ,j; for(i = 0;i < 32;++i) { sta.push(*p); ++p; } for(i = 0; i < 32;++i) { if(sta.top() == '0') { tmp = 0; } else { tmp = 1; } sta.pop(); for(j = 0;j < i;++j) { tmp = tmp * 2; } sum += tmp; } return sum;}//10进制数转2进制,并保存在bool类型数组中void DEC_to_zrdny(unsigned int value, bool *buffer,int i){ bool * p = buffer; bool itmp = 0; int n = 0; stack<bool> sta; while(value) { itmp = value%2; value = value/2; sta.push(itmp); } n = sta.size(); p = p + (i+1) * 8 - n; while(!sta.empty()) { *p = sta.top(); sta.pop(); ++p; }}//二进制数转成无符号整型unsigned int zrdny_to_UIN(bool *p){ stack<bool> sta; unsigned int sum = 0; unsigned int tmp = 0; int i ,j; for(i = 0;i < 32;++i) { sta.push(*p); ++p; } for(i = 0; i < 32;++i) { tmp = sta.top(); sta.pop(); for(j = 0;j < i;++j) { tmp = tmp * 2; } sum += tmp; } return sum;}//点分十进制转为unsigned int 整型数值记法unsigned int DDN_to_UIN(const char *IP_address){ const char *p = IP_address; bool buffers[32] = {0} ; char buff[3] = {0}; unsigned int s = 0; long long tmp = 0; for(int i = 0;i < 4;++i) { memset(buff,'*',3); for(int j = 0;j < 3;++j) { buff[j] = *p; ++p; if(*p == '.' || *p == '') { ++p; break; } } tmp = my_atoi(buff); if(tmp > 255) { return UINT_MAX; } DEC_to_zrdny(tmp,buffers,i); } s = zrdny_to_UIN(buffers); return s;}int main(){ printf("%un", DDN_to_UIN("128.399.2.12")); printf("%un",UINT_MAX);}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。