十六16进制 字符串转换成字符串

您所在的位置: &
iOS十六进制和字符串的相互转换
iOS十六进制和字符串的相互转换
本文为51CTO的网友介绍了iOS十六进制和字符串的相互转换的内容,其中为大家直接复制出了实现的代码段,希望大家自己试试。
NSString&*dictString&=&[dict&JSONFragment];&
用这个就行了。。。
dictString==={&content&:&Sadgfdfg&,&phoneno&:&&,&email&:&&}===&&&+&(NSString&*)stringFromHexString:(NSString&*)hexString&{&&&char&*myBuffer&=&(char&*)malloc((int)[hexString&length]&/&2&+&1);&bzero(myBuffer,&[hexString&length]&/&2&+&1);&for&(int&i&=&0;&i&&&[hexString&length]&-&1;&i&+=&2)&{&unsigned&int&anI&NSString&*&hexCharStr&=&[hexString&substringWithRange:NSMakeRange(i,&2)];&NSScanner&*&scanner&=&[[[NSScanner&alloc]&initWithString:hexCharStr]&autorelease];&[scanner&scanHexInt:&anInt];&myBuffer[i&/&2]&=&(char)anI&}&NSString&*unicodeString&=&[NSString&stringWithCString:myBuffer&encoding:4];&NSLog(@&------字符串=======%@&,unicodeString);&return&unicodeS&&&}&&&&+&(NSString&*)hexStringFromString:(NSString&*)string{&NSData&*myD&=&[string&dataUsingEncoding:NSUTF8StringEncoding];&Byte&*bytes&=&(Byte&*)[myD&bytes];&&NSString&*hexStr=@&&;&for(int&i=0;i&[myD&length];i++)&&{&NSString&*newHexStr&=&[NSString&stringWithFormat:@&%x&,bytes[i]&0xff];&&if([newHexStr&length]==1)&&hexStr&=&[NSString&stringWithFormat:@&%@0%@&,hexStr,newHexStr];&&else&&hexStr&=&[NSString&stringWithFormat:@&%@%@&,hexStr,newHexStr];&}&return&hexS&}&
【编辑推荐】【责任编辑: TEL:(010)】
关于&&的更多文章
Android 4.4即将发布,这对大家来说都是很期待的,当然,无论是
既然强大的Android Studio来了,有什么理由不去用呢?
作为Android开发者,最头疼是什么?相信大家会异口同
七夕,是让人听起来就觉得美好的日子,牛郎织女鹊桥相
PC互联网巨头百度、腾讯和阿里,通过在移动互联网投资
本书将实时系统、实时统一建模语言、实时系统的统一开发过程和Rational Rose RealTime建模环境有机地结合起来,以案例为基础,系
Windows Phone专家
Android开发专家
51CTO旗下网站查看: 8660|回复: 16
注册时间最后登录阅读权限0积分316精华0帖子
提示: 作者被禁止或删除 内容自动屏蔽
注册时间最后登录阅读权限50积分896精华0帖子
高级会员, 积分 896, 距离下一级还需 104 积分
哈哈,你例子是一个伪命题,你那个定义AA方法是不存在的。
只有可能是下面两种情况:
第一种:char AA[6]={0x0a,0x0f,0x01,0x0e,0x06,0x0c};复制代码第二种:char AA[6]={'a','f','1','e','6','c'};复制代码第一种:
移位就行了
unsigned long CharArrayToNumber( unsigned char *p_pBuff, int p_iSize )
{
& & & & if( NULL != p_pBuff && p_iSize & 0 && p_iSize &= 8 )
& & & & {
& & & & & & & & unsigned long ulRet = 0;
& & & & & & & & p_iSize -= 1;
& & & & & & & & for(int i=0;i&=p_iS++i)
& & & & & & & & {
& & & & & & & & & & & & ulRet |= ((unsigned long)(p_pBuff[i]))&&((p_iSize-i)&&2);
& & & & & & & & }
& & & & & & & & return ulR
& & & & }
& & & & else
& & & & {
& & & & & & & & // arduino 有没有 throw 我不知道,异常肯定就挂了,怎么调试我也不知道
& & & & & & & & //throw &CharArrayToNumber: arg error&;
& & & & & & & & return 0;
& & & & }
}
复制代码你的例子就写成:
char AA[6]={0x0a,0x0f,0x01,0x0e,0x06,0x0c};
unsigned long ulVal = CharArrayToNumber(AA,6);
复制代码第二种:
就比较麻烦了,需要一个字符到数字的转换,估计你想要这个的可能性大
inline unsigned long CharToNumber( unsigned char p_ucVal )
{
& & & & switch(p_ucVal)
& & & & {
& & & & case '0':
& & & & & & & & return 0;
& & & & case '1':
& & & & & & & & return 1;
& & & & case '2':
& & & & & & & & return 2;
& & & & case '3':
& & & & & & & & return 3;
& & & & case '4':
& & & & & & & & return 4;
& & & & case '5':
& & & & & & & & return 5;
& & & & case '6':
& & & & & & & & return 6;
& & & & case '7':
& & & & & & & & return 7;
& & & & case '8':
& & & & & & & & return 8;
& & & & case '9':
& & & & & & & & return 9;
& & & & case 'A':
& & & & & & & & return 10;
& & & & case 'B':
& & & & & & & & return 11;
& & & & case 'C':
& & & & & & & & return 12;
& & & & case 'D':
& & & & & & & & return 13;
& & & & case 'E':
& & & & & & & & return 14;
& & & & case 'F':
& & & & & & & & return 15;
& & & & case 'a':
& & & & & & & & return 10;
& & & & case 'b':
& & & & & & & & return 11;
& & & & case 'c':
& & & & & & & & return 12;
& & & & case 'd':
& & & & & & & & return 13;
& & & & case 'e':
& & & & & & & & return 14;
& & & & case 'f':
& & & & & & & & return 15;
& & & & default:
& & & & & & & & // arduino 有没有 throw 我不知道,异常肯定就挂了,怎么调试我也不知道
& & & & & & & & //throw &CharToNumber: arg error&;
& & & & & & & & return 0;
& & & & }
}
复制代码这么写为了速度快,当然为了好看可以把 A 和 a 写一起,但写一起编译器恐怕不能优化成跳转,AVR的汇编我不了解,哪位了解可以看一下反汇编确定一下。
如果不确定,又追求效率,可以自己优化,给个思路:
inline unsigned long CharToNumber( unsigned char p_ucVal )
{& & & & // 如果要用,具体 0 的数目对不对最好自己数清楚一下。。。
& & & & static const unsigned char __TransferArray[] = {0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,12,13,14,15};
& & & & if( p_ucVal &= '0' && p_ucVal &= 'f' )
& & & & {& & & & // 意思就是这一步在自己的代码里就保证了肯定是指针跳转
& & & & & & & & return __TransferArray[p_ucVal-'0'];
& & & & }
& & & & else
& & & & {
& & & & & & & & //throw &CharToNumber: arg error&;
& & & & & & & & return 0;
& & & & }
}
unsigned long CharArrayToNumber( unsigned char *p_pBuff, int p_iSize )
{
& & & & if( NULL != p_pBuff && p_iSize & 0 && p_iSize &= 8 )
& & & & {
& & & & & & & & unsigned long ulRet = 0;
& & & & & & & & p_iSize -= 1;
& & & & & & & & for(int i=0;i&=p_iS++i)
& & & & & & & & {
& & & & & & & & & & & & ulRet |= CharToNumber(p_pBuff[i])&&((p_iSize-i)&&2);
& & & & & & & & }
& & & & & & & & return ulR
& & & & }
& & & & else
& & & & {
& & & & & & & & //throw &CharArrayToNumber: arg error&;
& & & & & & & & return 0;
& & & & }
}
复制代码你的例子就写成:
char AA[6]={'a','f','1','e','6','c'};
unsigned long ulVal = CharArrayToNumber(AA,6);
复制代码=========================================================
ulVal 既是 0xAF1E6C 也是
printf(&ulVal=0x%X\n&, ulVal);
printf(&ulVal=0x%ld\n&, ulVal);
// 输出:
ulVal=0xAF1E6C
ulVal=
复制代码不过你这个需求真的很奇怪,一个 char 的范围本身就是 0x00-0xFF 了
你那个AA为什么不是 char AA[4]={0x00,0xaf,0x1e,0x6c} ?
如果是大端系统就可以直接:
unsigned long ulVal = *((unsigned long *)AA);
复制代码小端系统0、3字节1、2字节交换后,就和上面一样直接强转。
大致就这么几种,根据你的情况用吧。总的来说 arduino 对性能的要求比较苛刻,
但效率主要取决于设计思路,具体代码的优化只能是毛毛雨。
arduino 是大端还是小端系统我还真没注意,测一下很简单:
void TestEndian()
{
& & & & static union {
& & & & & & & & char _c[4];
& & & & & & & & unsigned long _l;
& & & & } __endian_test = { 'l', '0' ,'0', 'b'&&};
& & & & if( 'b' == ((char)__endian_test._l) )
& & & & & & & & printf(&是大端系统\n&);
& & & & else
& & & & & & & & printf(&是小端系统\n&);
}
复制代码
注册时间最后登录阅读权限50积分739精华0帖子
高级会员, 积分 739, 距离下一级还需 261 积分
膜拜一楼大神
注册时间最后登录阅读权限30积分481精华1帖子
中级会员, 积分 481, 距离下一级还需 19 积分
补充一楼大神的,先上一段代码char s[]=&0xA&;
i = strtol(s, NULL, 16);
printf(&%d&, i);复制代码使用strtol可以直接转化成十进制,百科中查下这个函数。你可以直接把AA作为参数放进来,楼主的AA定义是错的,得用1楼的第二种方式定义。
另外你要把AA变成0x开头的可以这样char tmpdata[32];
sprintf(tmpdata,&0x%s&,AA);
//tmpdata中就是0xAF1E6C字符串了
// 继续用strtol转换行了
int i= strtol(tmpdata,NULL,16);复制代码sprintf& & scanf& &memset& &memcpy 这四个函数还是比较有用的,前两个是对字符串操作,后两个是直接对内存数据操作,可以百科看一下
注册时间最后登录阅读权限0积分316精华0帖子
提示: 作者被禁止或删除 内容自动屏蔽
注册时间最后登录阅读权限30积分481精华1帖子
中级会员, 积分 481, 距离下一级还需 19 积分
lilho_e 发表于
非常感谢 jytong ,转角 两位兄弟的回复。
我先消化一下,回头再来请教!
谢谢你们二位!
数组清零你可以用memset函数memset(aa,0,aa占用的内存大小);
//这句是把AA数组所用内存全部设置为0复制代码C语言中数组定义不能没有长度,必须指定长度。如果你想用个变长的字符串的话可以使用char* 这是指针,不建议新手使用,不及时释放会造成内存泄漏
注册时间最后登录阅读权限30积分481精华1帖子
中级会员, 积分 481, 距离下一级还需 19 积分
另外你要截取字符串中间的某几位数据的话可以使用strncpy函数char data[]= &af1e6c........&;//这里直接赋值时候是可以不写数组长度的,编译器会自动指定data长度的
//要从第12位开始截取4个字符,出租是从0开始的还记得吧
char dest[5];//要定义5个字符的长度才能保存4个字符 切记
strncpy(dest,data+12,4);复制代码现在dest中就是你想要的数据了。别忘记字符串是用'\0'标识结束的,所以要定义5个&&内存中保存的数据举例: a3c4\0&&这就是内存中保存的数据
注册时间最后登录阅读权限0积分316精华0帖子
提示: 作者被禁止或删除 内容自动屏蔽
注册时间最后登录阅读权限0积分316精华0帖子
提示: 作者被禁止或删除 内容自动屏蔽
注册时间最后登录阅读权限30积分481精华1帖子
中级会员, 积分 481, 距离下一级还需 19 积分
lilho_e 发表于
再次感谢楼上两位兄弟的回复。
现在找到一个简单的函数解决了:
unsigned long ulVal =strtol(data, NULL ...
看来data数组中不需要加上0x开头是吧?
Powered by查看: 14870|回复: 8
将十六进制字符串转换为十进制数值
阅读权限200
在程序中,我们有时需要将一个十六进制字符串转换为十进制数字。比如:
char *ptr=&0x11&;
//我们想让n等于0x11,即17
通常我们在C中,想将一个字符串转换为一整形数字,通常会使用下面的方法:char *ptr=&123&;& & & &
int n=0;
n=atoi(ptr);
printf(&%d\n&,n);
//输出:123复制代码但是atoi库函数只能将十进制字符串转化为int整形,比如下面的例子:#include &stdlib.h&
#include &stdio.h&//atoi头文件
int main(void)
& &char *str = &12345.67&;
& &n = atoi(str); //int atoi(const char *nptr);
& &printf(&string = %s integer = %d\n&, str, n);
& &return 0;
}
/*输出:
&&string = 12345.67 integer = 12345
*/复制代码所以要用atoi函数将&0x11&转化为十进制整形17是不行的。如果用的话,会输出下面的结果:& &
& &char *str = &0x11&;
& &n = atoi(str); //返回值n等于0 (显然不是我们想要的结果)复制代码那怎么办呢?这时有人会想,那好办,我们自己写个函数转化下就行了,比如用下面的方法:
注意:我们用VC 6.0建了一个Win32控制台程序,为了方便,程序中使用了CString类型变量,需要做一点修改。
(1)包含afx.h头文件
(2)在Project-&Settings-&General-&Mircosoft Foundation Classes中,选择Use MFC in a Shared DLL
然后我们就可以在Win32控制台下使用CString变量了,否则会出现编译错误。#include &iostream&
#include &afx.h&
int ChangeNum(CString str,int length)& &
{& &
& & & & char&&revstr[16]={0};&&//根据十六进制字符串的长度,这里注意数组不要越界
& & & & int& &num[16]={0};& &
& & & & int& &count=1;& &
& & & & int& &result=0;& &
& & & & strcpy(revstr,str);& &
& & & & for& &(int i=length-1;i&=0;i--)& &
& & & & {& &
& & & & & & & & if ((revstr[i]&='0') && (revstr[i]&='9'))& &
& & & & & & & & & & & & num[i]=revstr[i]-48;//字符0的ASCII值为48
& & & & & & & & else if ((revstr[i]&='a') && (revstr[i]&='f'))& &
& & & & & & & & & & & & num[i]=revstr[i]-'a'+10;& &
& & & & & & & & else if ((revstr[i]&='A') && (revstr[i]&='F'))& &
& & & & & & & & & & & & num[i]=revstr[i]-'A'+10;& &
& & & & & & & & else& &
& & & & & & & & & & & & num[i]=0;
& & & & & & & & result=result+num[i]*& &
& & & & & & & & count=count*16;//十六进制(如果是八进制就在这里乘以8)& &
& & & & }& &
& & & && &
}
int main()
{
& & & & CString& &str=&0x11&;
& & & & int n=0;
& & & & n=ChangeNum(str,str.GetLength());
& & & & printf(&%d\n&,n);
& && &&&return 0;& & & &
}
/*输出:
&&17
*/复制代码是的,上面方法可以得到我们想要的值。还有更简单的方法吗?当然有!
方法1:#include &stdio.h&
int main()
{
& & char& &szValue[]&&=& &&0x11&;& &
& & int& & nValude& & =& &0;& && &
& & sscanf(szValue,&%x&,&nValude);& &
& & printf(&%d\n&,nValude);
& & return 0;& & & &
}
/*输出:
&&17
*/复制代码主要用到sscanf这个库函数:
函数名: sscanf
功&&能: 执行从字符串中的格式化输入
用&&法: int sscanf(char *string, char *format[,argument,...]); //%x就是我们要格式化的类型,即输出十六进制
方法2:#include &stdio.h&
#include &stdlib.h&//strtol头文件
int main()
{
& & char *p=&0x11&;& &
& & char *& &
& & int i = (int)strtol(p, &str, 16);//十六进制
& & printf(&%d\n&,i);
& & return 0;& & & &
}
/*输出:
&&17
*/复制代码主要用到strtol这个库函数,它的使用方法是:
函数名: strtol
功&&能: 将串转换为长整数
用&&法: long strtol(char *str, char **endptr, int base);//base指明我们要转换为几进制数
程序例:#include &stdlib.h&
#include &stdio.h&
int main(void)
& &char *string = &0x11&, *
& &/* strtol converts string to long integer */
& &lnumber = strtol(string, &endptr, 16);
& &printf(&string = %s&&long = %ld\n&, string, lnumber);
& &return 0;
/*输出:
&&string = 0x11 long = 17
*/复制代码在VC 6.0的MFC程序中,我们有时要转换句柄就可以用strtol这个函数,比如:
HANDLE handle = (HANDLE)strtol(str,NULL, 16);
PS:句柄是什么?
句柄就是用来区分各种内存对象的唯一标识符号,是个32位整数。
有些是整个系统唯一(如窗口句柄),有些是当前进程或线程中唯一(如线程句柄,全局的有另一个标识符)。
详细的可分为许多种,都是以H开头的。在VB中使用时全部都用Long。
常见的有窗口句柄(HWND),设备描述表句柄(HDC),内存句柄(HMEM),文件句柄,进程句柄,线程句柄,笔的类型句柄(HPEN),字体句柄(HFONT),区域句柄(HRGN)等等。
在申请句柄时是要占用资源的,分三类SYSTEM、USER、GDI。而WINDOWS的资源是固定的,并不随内存的扩大而扩大,所以使用完以后一定要释放。
在网上,还看到一位朋友提出一种方法,就是读写INI文件(我认为这种方法效率太低,毕竟要读写文件的),也将其摘录如下://存储HANDLE
struct Tag_STRUCT
& & {
& && &&&HWND hW
& & } ;
& & struct Tag_STRUCT S
& & Struct.hWnd = m_hW
& & //把包含句柄的结构体写入ini文件
& & WritePrivateProfileStruct(&Section&,&Key&,&Struct,sizeof(Struct),&C:\\1.ini&);
//读取HANDLE
& & struct Tag_STRUCT
& & {
& && &&&HWND hW
& & } ;
& & struct Tag_STRUCT S
& & //从包含句柄的结构体的ini文件读取HANDLE
& & GetPrivateProfileStruct(&Section&,&Key&,&Struct,sizeof(Struct),&C:\\1.ini&);复制代码以上是我目前所知道的可以将十六进制的字符串转化为整形数值的方法,可能还有更合适的方法,也请看到此篇文章的朋友帮忙留言添加,谢过!
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限60
铜牌会员, 积分 1435, 距离下一级还需 65 积分
StrToIntEx Function Converts a string representing a decimal or hexadecimal number to an integer
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限200
这个也不错,简单方便!……
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限70
银牌会员, 积分 2466, 距离下一级还需 534 积分
本帖最后由 dqf88 于
10:06 编辑
牛人大哥,怎么实现一个包含汉字和英文字母的十六进制字符串与普通字符串之间的转换呢?
“Abc中国”&------&“Abcd6d0b9fa”
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限200
十六进制字符串中只能有 0~9 和 A~F 怎么可能有汉字呢?
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限70
银牌会员, 积分 2466, 距离下一级还需 534 积分
就是将“Abc中国”转换成“Abcd6d0b9fa”,反之依然
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限70
银牌会员, 积分 2466, 距离下一级还需 534 积分
我找到了,原来就是URL编码,哈哈哈。
我是想将richedit的内容保存在数据库里,但是RTF保存汉字的时候是用16进制保存的,如果我想查找数据库的字段内容时,必须要将汉字编码,要不然就查找不到汉字,所以才有此一问。谢谢
我把代码上传了
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限60
铜牌会员, 积分 985, 距离下一级还需 515 积分
dqf88 发表于
回复 Syc 的帖子
我找到了,原来就是URL编码,哈哈哈。
richedit不是有rtf什么来的吗?可以保存信息的吧!
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限70
银牌会员, 积分 2466, 距离下一级还需 534 积分
什么意思?
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
站长提醒 /2
本着让大家学习到更多更好的VC++编程技术,选择一个适合自己的方向发展下去。VC驿站从即日起招聘教程讲师,主要是VC++方向,可以涉及安全类、破解类、编程开发类等等。
期待您的加盟。。。
为了能给广大编程爱好者提供一个更好的学习交流平台,从即日起面向广大网友特举办《发原创得奖励》活动。Vip教程,驿站U盘,无线鼠标 免费送,礼品丰厚,赶快来参加吧!
VC驿站微信公众号cctry2009
Powered by Discuz! X3.2(技术讨论)16进制字符串转换成10进制_java吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:469,719贴子:
(技术讨论)16进制字符串转换成10进制收藏
代码越少越好啊....自己写算法啊..不带vlueof的....
parseInt(String s,
int radix) 没有 valueOf
你可以先转成2进制,再转10进制。
挤在一行看上去代码少String hexStr = "ffff";int dec = 0;
char c = 0;
int r = 0;
for(int i=hexStr.length()-1;i&=0;dec+=(r =(c=hexStr.charAt(i))&='0'&&c&='9'?c-'0':c&='A'&&c&='F'?c-'A'+10:c&='a'&&c&='f'?c-'a'+10:0)*Math.pow(16,i),--i); System.out.
这个应该很简单好懂了... 不带 valueOf.String hex = "CafeBabe";long result = 0;for ( char c : hex.toCharArray() )result = result * 16 + Character.digit( c, 16 );System.out.println(result);
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或2738人阅读
VC++ 使用心得(92)
新闯项目(12)
1.将十六进制字符(unsigned char 一个字节),通过CString类的Format函数,将char转成十六进制字符串
2.再将十六进制字符串通过 “ ChangeNum ” 函数转成十进制数;
3.最后通过gcvt函数再将十进制数转成字符串
//ADC Value Display
CString ADCVal,T //接收数据转换成十六进制buffer
DAdcVal[20];
//浮点转字符串buffer
double v1=0;
//********************************
//将十六进制字符转成十六进制字符串
//********************************
ADCVal=&&;
//变量清零
memset(DAdcVal,0,sizeof(DAdcVal));
Temp.Format(&%2X&,rxdata[5]);
//data2为高字节, Format函数中的&%2X&代表转成字符型数据
//rxdata[i]是主程序中定义的unsigned char型数据
Temp.Format(&%2X&,rxdata[4]);
//data1为低字节
ADCVal+=T
ADCVal.Replace(& &,NULL);
//去掉数据中间的空格
//*********************************
//将十六进制字符串转成十进制数
//*********************************
v=ChangeNum(ADCVal,ADCVal.GetLength());
//将十六进制字符转成十进制数字
v1=v*(3.3/4096);
//按协议计算ADC的数值
//*********************************
//将十进制数转成字符串
//*********************************
gcvt(v1,5,DAdcVal);
//将十进制浮点数转换成字符串
if (rxdata[2]==0x04) //如是04 command显示ADC值
m_Register_frm.m_TemData = DAdcV
m_Register_frm.SetDlgItemText(IDC_EDIT_TemData,m_Register_frm.m_TemData);
ChangeNum函数的实现:
//---------------------------------------------------------------------
//十六进制字符串转十进制数函数
//---------------------------------------------------------------------
int ChangeNum (CString str, int length)
revstr[16]={0};
//根据十六进制字符串的长度,这里注意数组不要越界
num[16]={0};
strcpy(revstr,str);
(int i=length-1;i&=0;i--)
if ((revstr[i]&='0') && (revstr[i]&='9'))
num[i]=revstr[i]-48;//字符0的ASCII值为48
else if ((revstr[i]&='a') && (revstr[i]&='f'))
num[i]=revstr[i]-'a'+10;
else if ((revstr[i]&='A') && (revstr[i]&='F'))
num[i]=revstr[i]-'A'+10;
result=result+num[i]*
count=count*16;//十六进制(如果是八进制就在这里乘以8)
gcvt函数的使用,参考blog:
本例在程序中位置
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:446311次
积分:7144
积分:7144
排名:第2051名
原创:192篇
转载:531篇
评论:42条

我要回帖

更多关于 16进制 字符串 的文章

 

随机推荐