如何对C中的某些数据进行逐位运算?

时间:2013-08-15 15:20:49

标签: c bit-manipulation

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

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

以大端方式将给定数据拆分为字节(bytesdata中的数字字节)。数据本身可以是任何东西 - 一个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中使用wotk,除了标准的库之外没有任何额外的库。

1 个答案:

答案 0 :(得分: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));