如何将字符串“ffffffff”转换成十进制数 -1 用它_tcstol 行吗? 我试了一下 只能转换成正数 如 _tcstol(“aa”,NULL,16)==170 但_tcstol(“ffffffff”,NULL,16)==LONG.MAX 不等于-1 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 unsigned int ui = _tcstoul("ffffffff",NULL,16);int result = (int)ui; //如果最高位为一,还可以写成 result = (int)(~ui) - 1 将"ffffffff"转成0xffffffff容易吧,存进一个int变量就是-1了。 intparse( char *strtext, unsigned char *binbuf ){ size_t l = strlen( strtext ); int thelen = 0; size_t i; unsigned char a; unsigned short t; for( i = 0; i < l; i++ ) { if( XIEGANG == strtext[ i ] ) { do { strtext[ i ] = 0x20; i++; } while( 0x0a != strtext[ i ] && 0x0d != strtext[ i ] && 0x00 != strtext[ i ] ); } } for( i = 0; i < l; i++ ) { if( ( strtext[ i ] >= '0' && strtext[ i ] <= '9' ) || ( strtext[ i ] >= 'A' && strtext[ i ] <= 'F' ) || ( strtext[ i ] >= 'a' && strtext[ i ] <= 'f' ) ) { if( strtext[ i ] >= '0' && strtext[ i ] <= '9' ) a = strtext[ i ] - '0'; if( strtext[ i ] >= 'A' && strtext[ i ] <= 'F' ) a = strtext[ i ] - 'A' + 10; if( strtext[ i ] >= 'a' && strtext[ i ] <= 'f' ) a = strtext[ i ] - 'a' + 10; thelen++; if( thelen % 2 ) //如果是第奇数个1,3,5 { t = a; } else { t <<= 4; t += a; *( binbuf + ( thelen / 2 ) - 1 ) = ( unsigned char )t; } } } return thelen / 2;}int i;parse( "ffffffff", ( unsigned char * ) &i );printf( "%d", i ); int a = 0xfffffff;if(a == -1){ //会执行道这里。}else{} 写错了,应该是 result = -(int)~ui -1 ,也就是result = -((int)~ui +1) ,这牵扯到补码的计算,罗嗦了,还是直接强制转换来得快。 我用swscanf_s 解决了问题 谢谢各位哈! 使用双缓冲技术后,鼠标一动窗口就变黑了 100分跪求字符串排序算法 CDC的DrawText函数是怎么回事? 请问怎么处理OnLButtonDblClk与OnLButtonDown冲突的? 子窗体的样式 好难啊!!!请问各位VC能不能接受VB的自定义事件? WaitForSingleObject函数的困惑 刚刚升星 散分 同时申请基础版 斑竹 希望大家支持啊 我会努力做好工作的 如何避免结构对齐? 用VC++怎么在开始\程序菜单中和桌面上创建快捷图标 做医疗软件的朋友请进!!!帮我看看这个问题!!!救命!!!! 问个低级小问题,虽然低级但是比较重要,高手们说下!谢谢
int result = (int)ui; //如果最高位为一,还可以写成 result = (int)(~ui) - 1
parse( char *strtext, unsigned char *binbuf )
{
size_t l = strlen( strtext );
int thelen = 0;
size_t i;
unsigned char a;
unsigned short t; for( i = 0; i < l; i++ )
{
if( XIEGANG == strtext[ i ] )
{
do
{
strtext[ i ] = 0x20;
i++;
} while( 0x0a != strtext[ i ] && 0x0d != strtext[ i ] && 0x00 != strtext[ i ] );
}
} for( i = 0; i < l; i++ )
{
if( ( strtext[ i ] >= '0' && strtext[ i ] <= '9' ) ||
( strtext[ i ] >= 'A' && strtext[ i ] <= 'F' ) ||
( strtext[ i ] >= 'a' && strtext[ i ] <= 'f' ) )
{
if( strtext[ i ] >= '0' && strtext[ i ] <= '9' )
a = strtext[ i ] - '0';
if( strtext[ i ] >= 'A' && strtext[ i ] <= 'F' )
a = strtext[ i ] - 'A' + 10;
if( strtext[ i ] >= 'a' && strtext[ i ] <= 'f' )
a = strtext[ i ] - 'a' + 10; thelen++; if( thelen % 2 ) //如果是第奇数个1,3,5
{
t = a;
}
else
{
t <<= 4;
t += a;
*( binbuf + ( thelen / 2 ) - 1 ) = ( unsigned char )t;
}
}
}
return thelen / 2;
}int i;
parse( "ffffffff", ( unsigned char * ) &i );printf( "%d", i );
if(a == -1)
{
//会执行道这里。
}
else
{
}
写错了,应该是 result = -(int)~ui -1 ,也就是result = -((int)~ui +1) ,这牵扯到补码的计算,罗嗦了,还是直接强制转换来得快。