求助,关于16进制数的移位操作

Eagle_China89 2012-11-15 08:06:56
现在我收到字符串类型的16进制数str="A12F",

对这个数进行右移三位的运算,

然后将该数转为10进制

求教方法和思路。
...全文
842 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eagle_China89 2012-11-18
  • 打赏
  • 举报
回复
引用 12 楼 gz_qmc 的回复:
那是运气好,否则结果不对,异常 \0结尾是强制最后那个为0 如果不这样,那个就是随机的 如果随机的那个数正好是0~9或者A~F中的一个,你的结果就错了 当然如果你的字串只能是4个,那有个技巧 int s2h2d(char *s) { char *tmp[5]={0}; int data; memcpy(tmp,s,……
这个看起来不错 我写的代码是这样的 StrTemp=CStrTemp.GetBuffer(sizeof(int)); InstrumentNum=hex_to_dec(StrTemp); GetBuffer的功能和你这个memcpy的功能应该是一样的,非常感谢你,让我对着段程序有了新的理解 hex_to_dec 里面就是对sscanf的调用。
gz_qmc 2012-11-17
  • 打赏
  • 举报
回复
用法: int MyWant=s2h2d("A12F\0"); 注意哦,你的字串要有\0接尾哦
gz_qmc 2012-11-17
  • 打赏
  • 举报
回复
哥也来骚一个 int s2h2d(char *s) { int data; sscanf(s,"%x",&data); data>>=3; return data; }
转角天边 2012-11-17
  • 打赏
  • 举报
回复
引用 6 楼 lili893628843 的回复:
引用 2 楼 anhuizhuanjiao 的回复:itoa,atoi字符串与数字的转换函数 谢谢你的回答,这两个函数式可以用了对字符串类型的数字串转换为10进制的数,但是不知道对于16进制数的转换效果如何,谢谢
char *itoa( int value, char *string,int radix); 原型说明: value:欲转换的数据。 string:目标字符串的地址。 radix:转换后的进制数,可以是10进制、16进制等。
Eagle_China89 2012-11-17
  • 打赏
  • 举报
回复
引用 3 楼 turingo 的回复:
C/C++ code?1234567891011121314#include <stdlib.h>#include <stdio.h> int main(void){ char str[10] = "A12F"; int value = strtol(str, (char**)NULL, 16); value >>= 3; sprintf(str,……
谢谢你的回答,这个函数strtol是atoi的增强版,非常好,感谢,学习了
Eagle_China89 2012-11-17
  • 打赏
  • 举报
回复
引用 2 楼 anhuizhuanjiao 的回复:
itoa,atoi字符串与数字的转换函数
谢谢你的回答,这两个函数式可以用了对字符串类型的数字串转换为10进制的数,但是不知道对于16进制数的转换效果如何,谢谢
Eagle_China89 2012-11-17
  • 打赏
  • 举报
回复
引用 1 楼 zhuankeshumo 的回复:
字符串转数字 C/C++ code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556enum Status {kValid = 0, kInvalid}; int g_nStatus = kValid; ……
谢谢你的回答,很详细,这个算法给我了很大的帮助,我写的是MFC的程序,二楼的代码简单一些,目前只是要实现功能,但是你的算法确实很实用的,谢谢!
gz_qmc 2012-11-17
  • 打赏
  • 举报
回复
那是运气好,否则结果不对,异常 \0结尾是强制最后那个为0 如果不这样,那个就是随机的 如果随机的那个数正好是0~9或者A~F中的一个,你的结果就错了 当然如果你的字串只能是4个,那有个技巧 int s2h2d(char *s) { char *tmp[5]={0}; int data; memcpy(tmp,s,4); sscanf(tmp,"%x",&data); data>>=3; return data; }
Eagle_China89 2012-11-17
  • 打赏
  • 举报
回复
引用 9 楼 gz_qmc 的回复:
哥也来骚一个 int s2h2d(char *s) { int data; sscanf(s,"%x",&data); data>>=3; return data; }
OK 是用这个算法了我的,没有使用\0好像也没有出现错误,否则呢?
yinlincheng 2012-11-15
  • 打赏
  • 举报
回复
/* 现在我收到字符串类型的16进制数str="A12F", 对这个数进行右移三位的运算, 然后将该数转为10进制 */ #include<stdio.h> int stringtonum(char *s) { char *p; p=s; int result=0; while(*p!='\0') { if(*p>='A'&&*p<='Z') { result=result*16+(*p-'A')+10; } if(*p>='a'&&*p<='z') { result=result*16+(*p-'a')+10; } if(*p>='0'&&*p<='9') { result=result*16+(*p-'0'); } p++; } return result; } int main() { int result; char string[20]; printf("please input a string\n"); scanf("%s",string); result=stringtonum(string); result=result>>3; printf("the result is %d",result); return 0; }
图灵狗 2012-11-15
  • 打赏
  • 举报
回复

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
	char str[10] = "A12F";
	int value = strtol(str, (char**)NULL, 16);
	value >>= 3;
	sprintf(str, "%d", value);

	printf("%s\n", str);
	return 0;
}
转角天边 2012-11-15
  • 打赏
  • 举报
回复
itoa,atoi字符串与数字的转换函数
newtee 2012-11-15
  • 打赏
  • 举报
回复
字符串转数字
enum Status {kValid = 0, kInvalid};  
int g_nStatus = kValid;

int StrToInt(const char* str)
{
g_nStatus = kInvalid;
long long num = 0;

if(str != NULL)
{
const char* digit = str;

// the first char in the string maybe '+' or '-'
bool minus = false;
if(*digit == '+')
digit ++;
else if(*digit == '-')
{
digit ++;
minus = true;
}

// the remaining chars in the string
while(*digit != '/0')
{
if(*digit >= '0' && *digit <= '9')
{
num = num * 10 + (*digit - '0');

// overflow
if(num > std::numeric_limits<int>::max())
{
num = 0;
break;
}

digit ++;
}
// if the char is not a digit, invalid input
else
{
num = 0;
break;
}
}

if(*digit == '/0')
{
g_nStatus = kValid;
if(minus)
num = 0 - num;
}
}

return static_cast<int>(num);
}

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧