
builder c++将十六进制发送的十六进制字符串转化为十进制的字符串
展开全部
// builder c++将十六进制发送的十六进制字符串转化为十进制的字符串
// 例如12456789a以十六进制的数据发送,将接收到的数据处理为十进制的显示出来
TCHAR* hex2deci(const TCHAR*szh, TCHAR* out){ if(!szh || !out) return 0L;
int ic=lstrlen(szh);
const TCHAR*p;
int t=0, i=0;
int n=0, b=1;
for(p=szh+ic-1, i=0; i<ic; i++,p--){
t=*p-'0';
if(t>9) t=(*p-'a')+10;
if(t<0) t=(*p-'A')+10; // Hex使用的大写英文字母 ABCDEF
n+=t*b; b<<=4;
} // for
// 十进制数字转化为字符串...(直接从字符串转化到字符串比较复杂,我还没有找到简单方法.)
b=10; t=n;
TCHAR*q=out; *q='0';
while(t>0){ *q++='0'+t%b;
t/=b;
} // while
strrev(out); // 翻转,高位在左.
return out;
} // hex2deci
void t_hex2deci(){
TCHAR szh[10]="A3B4"; // 41908
TCHAR szd[10]="";
hex2deci(szh, szd);
cout<<"\nhex: "<< szh <<", decimal: "<<szd<<endl;
}
// 例如12456789a以十六进制的数据发送,将接收到的数据处理为十进制的显示出来
TCHAR* hex2deci(const TCHAR*szh, TCHAR* out){ if(!szh || !out) return 0L;
int ic=lstrlen(szh);
const TCHAR*p;
int t=0, i=0;
int n=0, b=1;
for(p=szh+ic-1, i=0; i<ic; i++,p--){
t=*p-'0';
if(t>9) t=(*p-'a')+10;
if(t<0) t=(*p-'A')+10; // Hex使用的大写英文字母 ABCDEF
n+=t*b; b<<=4;
} // for
// 十进制数字转化为字符串...(直接从字符串转化到字符串比较复杂,我还没有找到简单方法.)
b=10; t=n;
TCHAR*q=out; *q='0';
while(t>0){ *q++='0'+t%b;
t/=b;
} // while
strrev(out); // 翻转,高位在左.
return out;
} // hex2deci
void t_hex2deci(){
TCHAR szh[10]="A3B4"; // 41908
TCHAR szd[10]="";
hex2deci(szh, szd);
cout<<"\nhex: "<< szh <<", decimal: "<<szd<<endl;
}
展开全部
builder c++ ?这个东西不知道,不过你的需求应该是可以不依赖与平台吧。 我写了一份简单的代码,你可以参考一下。 hexStr2Num 函数会返回转换好的数值,怎么输出你自己看吧,呵呵。
实际使用的时候要注意一些限制条件,比如说如果字符串中有非十六进制字符时应该怎样处理,算出来的数字超过了unsigned int的最大值应该怎么办,等等。这些你就自己考虑吧。
另外,这段代码没有经过实机验证,是盲打出来的,你要是想使用的话最好跑几遍验证一下。
====================================================
unsigned int hexChar2Num(unsigned char inputChar)
{
if ('0' <= inputChar && '9' >= inputChar) {
return inputChar - '0';
}
else if ( 'a' <= inputChar && 'z' >= inputChar) {
return inputChar - 'a' + 10;
}
else if ('A' <= inputChar && 'Z' >= inputChar) {
return inputChar - 'A' + 10;
}
return 0;
}
unsigned int hexStr2Num(unsigned char* inputStr, int strSize)
{
unsigned int output = 0;
for (int i = 0; i < strSize; ++i) {
output = output <<8;
output += hexChar2Num(inputStr[i]);
}
return output;
}
实际使用的时候要注意一些限制条件,比如说如果字符串中有非十六进制字符时应该怎样处理,算出来的数字超过了unsigned int的最大值应该怎么办,等等。这些你就自己考虑吧。
另外,这段代码没有经过实机验证,是盲打出来的,你要是想使用的话最好跑几遍验证一下。
====================================================
unsigned int hexChar2Num(unsigned char inputChar)
{
if ('0' <= inputChar && '9' >= inputChar) {
return inputChar - '0';
}
else if ( 'a' <= inputChar && 'z' >= inputChar) {
return inputChar - 'a' + 10;
}
else if ('A' <= inputChar && 'Z' >= inputChar) {
return inputChar - 'A' + 10;
}
return 0;
}
unsigned int hexStr2Num(unsigned char* inputStr, int strSize)
{
unsigned int output = 0;
for (int i = 0; i < strSize; ++i) {
output = output <<8;
output += hexChar2Num(inputStr[i]);
}
return output;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询