10进制如何强制转为16进制?不是等值转换哦~

goooooooooooogle 2012-02-07 09:34:14
比如10进制的 56 如何转为16进制的 0x56?
...全文
681 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤独小剑 2012-02-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 minikinfish 的回复:]

sprintf_s(buf, "%d", 56);
sscanf_s(buf, "%x", &i);
[/Quote]或者
sprintf(buf, "%d", 56);
strtoul(buf, NULL, 16);
newpuple 2012-02-07
  • 打赏
  • 举报
回复
哦,循环体里面有点小错误,更正如下:

while (digit != 0)
{
a = digit % 10;
digit = digit / 10;
result |= a << (i++ * 4);
}
newpuple 2012-02-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mstlq 的回复:]
首先楼主要把56分成5和6,然后就是5*16+6,这就是结果
在举个例子,123变成0x123,就是楼主先把123分解成1,2和3,然后1*16*16+2*16+3
[/Quote]

就是这个思想,给个代码吧
void main()
{
int a;
int result = 0;
int digit = 56;
int i = 0;

while (digit != 0)
{
a = digit % ((i + 1) * 10);
digit = digit / ((i + 1) * 10);
result |= a << (i++ * 4);
}

printf("dec = %d -- hec = 0x%x", result, result);
}
heartszhang 2012-02-07
  • 打赏
  • 举报
回复
用c++:

#include <strstream>

std::strstream buffer;
int result_in_hex;
buffer << std::dec << 123;
buffer >> std::hex >> result_in_hex;

程序员小迷 2012-02-07
  • 打赏
  • 举报
回复
4楼正解:

int ret;
char buf[32];
sprintf(buf, "%d", 56);
sscanf(buf, "%x", &ret);

ret就是你要的值
Minikinfish 2012-02-07
  • 打赏
  • 举报
回复
sprintf_s(buf, "%d", 56);
sscanf_s(buf, "%x", &i);
Minikinfish 2012-02-07
  • 打赏
  • 举报
回复
sprintf_s(buf, "%d", 56);
_sscanf_s
AnYidan 2012-02-07
  • 打赏
  • 举报
回复
printf("0x%d\n",56);
mstlq 2012-02-07
  • 打赏
  • 举报
回复
首先楼主要把56分成5和6,然后就是5*16+6,这就是结果
在举个例子,123变成0x123,就是楼主先把123分解成1,2和3,然后1*16*16+2*16+3

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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