【问题标题】:Reading a hexadecimal value from a string into a decimal long将字符串中的十六进制值读取为十进制长
【发布时间】:2012-03-22 22:03:48
【问题描述】:

我有一个包含十六进制值的字符串:

"29E94B25"

我想将此十六进制字符串转换为使用 10 为底的无符号长整数。例如我想创建一个无符号长整数,其值为:

703154981

如何进行这种类型转换?

【问题讨论】:

  • 5*10^0 + 2*10^1 + 11*10^2 + ... + 2*10^7
  • @scibuff 我正在寻找一种我可以调用的方法来为我做这件事。与 atol() 类似。

标签: c hex type-conversion


【解决方案1】:

您可以使用strtoul 将该字符串读入无符号长整数:

unsigned long n = strtoul("29E94B25", NULL, 16);

然后您可以使用printf 以base-10 打印它。

没有基数不是 2 的 unsigned long 这样的东西。

【讨论】:

  • “在 2 以外的基数中没有 unsigned long 之类的东西”是什么意思。为什么会这样?
  • 所有 C 整数类型都存储二进制数。它们可以以十进制、十六进制等形式打印,但这总是需要转换。
【解决方案2】:

strtoul 是你所需要的

unsigned long x;
x = strtoul("29E94B25", 0, 16);

【讨论】:

    【解决方案3】:

    C#

    String hexNumber = "000001ae";
    int i = Int32.Parse(hexNumber, NumberStyles.HexNumber);
    MessageBox.Show(i); (or Console.Write(i))
    

    C:

    int main(void)
    {
    char s[] = "0D76";
    unsigned long x;
    x = strtoul(s, 0, 16);
    printf("The value represented by the string \"%s\" is\n"
    "%lu (decimal)\n" "%#lo (octal)\n" "%#lx (hex)\n",
    s, x, x, x);
    return 0;
    }
    

    【讨论】:

      【解决方案4】:

      可以将sscanf 用于任何类型的转换。

          #include<stdio.h>
          main(){
            char a[] = "29E94B25";
            unsigned long int b;
            sscanf(a,"%X",&b);
            printf("%ld",b);
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-22
        • 2019-07-27
        • 2012-02-03
        • 1970-01-01
        • 2020-03-14
        • 2020-06-20
        • 2018-01-31
        • 1970-01-01
        相关资源
        最近更新 更多