-4

我在 C 函数中有以下代码片段

int i;
for (i = bytes; i>0; --i) {
    printf("byte: %d", data & 0xff);
    data>>= 8;
}

以大端方式将给定数据拆分为字节(bytes是 中的字节数data)。数据本身可以是任何东西——一个 int 或一个 100 字节长的字符串。但是,如果data不是int,则代码将不起作用(invalid operands to binary X)。

例如,假设data是一个字符串,其内容hello world我希望得到以下数字:

byte: 104
byte: 101
byte: 108
byte: 108
byte: 111
byte: 32
byte: 119
byte: 111
byte: 114
byte: 108
byte: 100

我需要一个简单的解决方案来在纯 C 中工作,除了标准库之外没有任何额外的库。

4

1 回答 1

3

如果要打印原始二进制数据的字节:

void print_bytes(const void *data, size_t len)
{
    const unsigned char *p = data;
    for (size_t i = 0; i < len; i++)
        printf("%d ", p[i]);
}

您可以使用任何对象的地址调用它,如下所示:

unsigned long long u = 1234567890;
print_bytes(&u, sizeof u); // beware of endianness!

const char *s = "hello world";
print_bytes(s, strlen(s));
于 2013-08-15T15:24:25.810 回答