【问题标题】:convert key value of hexadecimal to decimal [closed]将十六进制的键值转换为十进制 [关闭]
【发布时间】:2014-09-04 06:58:48
【问题描述】:

我想将击键表示转换为十进制。 例如:- 输入字符串是

^@^D^@^A49

这应该转换为 0004000149 即^@ - 00 ^D -04 ^A -01 我从下面的链接中找到了正确的值

http://techurls.tripod.com/dha.htm

编辑:-

主要问题是映射值即^@ - 00 ^D -04 ^A -01

是否有任何标准的 lib 函数或需要使用 switch case 来完成?

【问题讨论】:

  • C 还是 C++?选一个。那不是十六进制输入;你在那里有控制字符符号。十六进制为 0-9 和 A-F
  • 这个问题似乎跑题了,因为 SO 不是一个神奇的代码生成器
  • @anurag 恐怕您的编辑没有多大帮助。看看std::hex能为你做什么。

标签: c++ c hex


【解决方案1】:

我相信你对所涉及的概念有一点误解:

首先,“^@^D^@^A49”不是十六进制数字序列,它是击键的可视化。 ^@ == CTRL+@ 例如。

十六进制数是写成以下形式的数字:

0xFF00AB12,即基数为 16 的数字。0 == 0, 1 == 1, ..., 9 == 9, A == 10, B == 11, ..., F == 15。 (0x 只是一个标准前缀,用于区分十六进制值和二进制或十进制数)。

如果您的目标是初始化一个字符串或整数并完全控制位的去向,我建议您将键盘输入读取为十六进制数字字符串(带或不带前缀,您可以选择。)

完成此操作后,您可以使用例如sscanf 将字符串读入整数。

int sscanf ( const char * s, const char * format, ...);

例子:

const char * hexstring = "FF800001";
unsigned int value;
sscanf(hexstring, "%x", &value);

【讨论】:

  • 如果您输入前缀,您可能需要在将其传递给 sscanf 之前再次剥离它。
  • 实际上序列必须从文件而不是键盘解析,所以我别无选择,只能将^@^D^@^A解析并转换为十进制形式。
  • 那么你应该使用二进制输入。 stackoverflow.com/questions/24716250/… 因为它会为您处理转换。
  • @StianV.Svedenborg '那你应该改用二进制输入......'嗯什么?
  • 通过以二进制模式打开文件来解决。这是有效的代码:) const char * fname = "filename";字符事件标签[2];字符值[2];整数值;文件* filp = fopen(fname, "rb" ); if (!filp) { printf("错误: 无法打开文件 %s\n", fname);返回-1; } 字符 * 缓冲区 = 新字符 [BUFFERSIZE]; fseek(filp, 0, SEEK_SET); fread(&Event_label, sizeof(char)*4, 1, filp); printf("",Event_label); printf("i= %d%d",Event_label[0],Event_label[1]);
猜你喜欢
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 2021-01-29
  • 2011-07-28
  • 1970-01-01
相关资源
最近更新 更多