【问题标题】:How to print specific byte of unsigned integer?如何打印无符号整数的特定字节?
【发布时间】:2015-01-28 04:44:31
【问题描述】:

我正在尝试用 C 语言编写一个程序来检查内存中的字节并打印它们的内容。给定一个 4 字节的无符号整数,以十六进制将整数的特定字节打印到标准输出的函数是什么样的? printf 是否具有某种内置功能?

这是我要找的界面。

// number - the integer to be examined
// order - the byte to be examined, with 0 being the lowest-order
//         (first) byte and 3 being the highest order (last) byte
void print_byte(unsigned number, unsigned order);

如果它对实现很重要,这将是一个 little-endian 机器。

【问题讨论】:

  • printf("%hhX", number >> (order * 8)); 可能是一个开始。
  • 发布一些代码供我们补充和纠正将是一个更好的开始;-)
  • @phadej 不同意这与发布的副本非常匹配。声称的重复显示如何从整数提取到整数。这篇文章需要询问如何“打印”特定字节。当然,代码可以使用副本然后打印结果,但可以存在更严格的方法,如我在上面的评论中所建议的那样绕过整数到整数的转换。
  • @Mawg 对不起,真的没有任何代码。如果可以的话,我总是发布一些sn-p。我要求一些我认为是单行的东西,考虑到 C 有利于处理单个字节。这不是在普通教科书中容易找到的东西,这就是我决定在这里问的原因。

标签: c


【解决方案1】:

请试试这个...

#include <stdio.h>
void print_byte(unsigned number, unsigned order)
{
    unsigned i = 0;

    i = (number >> (8*order)) & 0x000000FF;

    printf("Number:0x%08x, Byte:%02x, Order:%d\n",number,i,order);

    return;
}

int main(void) {

    print_byte(0x1f2e3d4c,0);
    print_byte(0x1f2e3d4c,1);
    print_byte(0x1f2e3d4c,2);
    print_byte(0x1f2e3d4c,3);

    return 0;
}

【讨论】:

  • 奇怪的结构......至于尝试,“试试这个”:(number &gt;&gt; 8*order) &amp; 0xFF
【解决方案2】:

如果使用 C99 或更高版本,请在移位后使用长度修饰符 "hh"。此修饰符将在打印之前将整数转换为unsigned/signed char。根据“字节”的含义使用 8 或 CHAR_BIT

printf("%hhX", number >> (order * 8));

#include <limits.h>
printf("%hhX", number >> (order * CHAR_BIT));

【讨论】:

    猜你喜欢
    • 2021-05-12
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 2018-03-21
    • 2012-04-15
    相关资源
    最近更新 更多