【问题标题】:How to input 8 byte hexadecimal number into char array?如何将 8 字节十六进制数输入 char 数组?
【发布时间】:2014-09-06 01:58:46
【问题描述】:

我想生成以07060504003020100 开头的十六进制数字序列。 下一个数字将是 0f0e0d0c0b0a0908 等等。

当我使用 unsigned long long int 并输出数据的前 4 位时,这意味着 0 被截断。它打印706050403020100

所以我正在考虑将数字放入 char 数组缓冲区(或其他缓冲区),然后打印输出,以便稍后如果我想比较我可以进行字符/字节比较。

谁能帮帮我? char[8]="0x0706050403020100" 看起来不对。

【问题讨论】:

    标签: c


    【解决方案1】:

    你用什么来打印你的价值?将 8 个 0 填充字节打印到标准输出的语法类似于

    printf("%016X", value);
    

    它是这样分解的:

    %x    = lowercase hex
    %X    = uppercase hex
    %16X  = always 16 characters (adds spaces)
    %016X = zero-pad so that the result is always 16 characters
    

    例如,你可以在 10 进制中做同样的事情:

    printf("%05d", 3); // output: 00003
    

    你也可以玩小数:

    printf("%.05f", 0.5); // output: 0.50000
    

    http://www.cplusplus.com/reference/clibrary/cstdio/printf/

    【讨论】:

    • 不,我想知道如何存储我的初始值 0x0706050403020100。我可以使用字符数组或动态使用 malloc 或使用 unsigned long long int 存储它吗??
    • 您可以将值存储在您已分配至少 8 字节内存的任何位置。这可能是一个 long(取决于硬件)、一个 char[8]、一个 long double(实际上可能是 16 个字节)、一个你制作的结构等。在你最初的帖子中你说你的问题是你没有输出号码时看不到第一个十六进制字符。这很正常——就像当你输出值 3 时,你通常不想看到 0000000003。如果你想要前导零,你必须告诉 printf 包含它们。但我可以向你保证,你的机器没有“忘记”一个 nybble。
    • 我也可以补充一下,做 char[8]="0x0706050403020100";可能会产生段错误,因为您声明了 8 个字节并用 18 个字节填充它。
    • @Rider:Thanks.But hw 告诉 printf 包含前导零。
    • 那么我应该如何声明使用 char(静态或动态)??
    猜你喜欢
    • 1970-01-01
    • 2020-01-24
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 2011-05-07
    • 2017-09-29
    相关资源
    最近更新 更多