我在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中使用wotk,除了标准的库之外没有任何额外的库。
答案 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));