【问题标题】:Using Windows GUI to input decimal values and display the corresponding hexadecimal values使用 Windows GUI 输入十进制值并显示相应的十六进制值
【发布时间】:2013-02-02 02:37:47
【问题描述】:

如何从 C 语言中的 windows API 设计中的文本框中检索输入的整数值,以将它们转换为字符串,然后通过 C 中的静态标签以十六进制数字显示这些值。

代码:

    GetWindowText(hwndtext1, hexval, 256);

    for (i = sizeof(hexval); i >= 0; i--)
      {     
        buf[i] = atoll(hexval);

        ulltoa(buf[i], szBuffer, 16);
        SetWindowText(hwndStatic3, szBuffer);

        }

--------编辑------ 我希望能够根据十进制输入显示十六进制数字。因此,在我用 c 开发的 GUI 上,我可以在文本框中写入十进制数字,并且我想在单独的文本框中显示十进制的十六进制值。

-------------编辑------

我已经稍微修正了代码,现在只显示十六进制数的最后一个字节。

例如。如果十进制输入是 2000.... 十六进制输出仅显示 d0。 当正确的十六进制输出应该是 7d0。

【问题讨论】:

  • 对不起,我不确定我明白了...您想将数字的十六进制字符串表示转换为十进制字符串表示,对吗?请编辑要清除的问题并删除误导性的 Get/SetWindowText 参考
  • 你在这里混合了太多不同的方面。有文本框操作,字符串处理,从字符串转换为整数,从整数转换为十六进制字符串。你在哪个方面挣扎?尝试将问题分解为您可以做的部分和您不能做的部分。
  • @user2075927 什么是case 1,这段代码在正确的位置吗?即,您确定按下按钮时会调用此代码吗?
  • 案例 1 只是我创建的 switch case 语句的一部分
  • @user2075927 是的,大多数阅读这篇文章的人之前都看过switch 声明。但是1 只是一个神奇的数字en.wikipedia.org/wiki/Magic_number_(programming),这对我们其他人来说意味着没有。因此,如果它不重要,请忽略它,如果它很重要,请使用描述性名称。

标签: c dev-c++


【解决方案1】:

此函数将整数值转换为 0x0 格式的十六进制字符串。第一个 int 是您的号码,第二个实际上需要一个 char(通常是 'a' 或 'A')来确定 10 到 15 个字符。

char *dtox(int d, int c){
static char buf[80];
if (0==d)return "0x0";
int p=0;
c-=10;
if (0>d) { buf[p++]='-'; d=-d;}
buf[p++]='0';buf[p++]='x';
unsigned int i=1<<28;
while (i>d) i/=16;
while (0<i){
   ((d/i)>9) ? (buf[p++]=(c+(d/i))) : (buf[p++]=('0'+(d/i)));
   if (i<=d) d=d%i;
   i/=16;
}
buf[p]=0;
return buf;
}

我只发布这个,因为 itoa 是一个非标准函数,真正的问题可能是传递你的函数所期望的 buf[256](一个 char 值)而不是 buf(一个 char 数组,又名字符串)

【讨论】:

  • 我将它从十进制转换为字符串函数,因此如果您的编译器尚未将整数除法和模数转换为位运算,您可能需要进一步优化。
  • 呃,为什么static char buf[80]
  • 没有原因,原来的十进制版本是这样的......只是剪切/粘贴
猜你喜欢
  • 1970-01-01
  • 2013-10-21
  • 2018-07-26
  • 1970-01-01
  • 2014-10-12
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多