【问题标题】:hexadecimal string to int conversion in CC中的十六进制字符串到int转换
【发布时间】:2011-11-12 11:36:10
【问题描述】:

我有一个包含十六进制值的文本文件,在我 fscanf 一个值之后,我需要知道如何将它从十六进制字符串转换为 int。然后将其转换回十六进制字符串以供以后打印。有人知道这个算法吗?谢谢。

【问题讨论】:

  • 为什么不在格式字符串中使用%x
  • 使用 %x 格式说明符而不是 %s。
  • 它不起作用,因为我需要将值放入 int 类型的变量中,所以当我使用 %x 格式时,我得到一个错误

标签: c string int hex


【解决方案1】:

正如马龙上面所说的:

int a, b, c;
fscanf(fp, "%x %x %x", &a, &b, &c);

以十六进制字符串形式返回

fprintf(fp, "%x %x %x", a, b, c);

我认为您可能对计算机存储int 类型变量的方式感到困惑。它们不以 10 为基数存储。它们以二进制形式存储,我相信您知道。这意味着将十六进制值分配给int 并没有什么特别之处。它不会以任何不同的方式存储。使用%x 只是表明您希望程序了解您给它的数字是十六进制数字(例如,它知道将字符串“10”存储为 10000(2) 而不是 1010(2) . 与输出相同。如果您的变量a 具有二进制10000(2) 并且您使用%x 打印它,则程序知道输出应该是10。如果您使用%d,它知道输出应该是16

【讨论】:

    【解决方案2】:

    您应该使用%x 格式说明符而不是%s 来读取您的值。这会将数据读取为十六进制整数。

    例如,如果您的文件如下所示:

    ff3c 5a cb2d

    然后你可以像这样读取这 3 个值:

    int a, b, c;
    fscanf(fp, "%x %x %x", &a, &b, &c); // a = 0xff3c, b = 0x5a, c = 0xcb2d
    

    【讨论】:

    • C 的问题在于它不像 C++ 那样类型安全。您遇到的错误可能是众多问题之一。要么 1. 你告诉函数它需要一个十进制整数 (%d) 但它实际上是十六进制的并且可以包含字母 (af) 2. ProcTable[i].processPriority 不是整数 3. ProcTable[i].processPriority 是一个整数但是你没有取它的地址 (&)
    • @biz:这应该不会出错。如果您遇到错误,请编辑您的问题以包含您的确切代码以及您收到的错误消息/行为。
    【解决方案3】:

    fscanffprintf 字符串中使用%x 格式说明符。

    【讨论】:

      猜你喜欢
      • 2012-01-24
      • 1970-01-01
      • 2018-01-31
      • 1970-01-01
      • 2010-11-18
      • 2019-08-04
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      相关资源
      最近更新 更多