如何在memset()中将int值转换为unsigned char有效?

时间:2016-06-01 09:16:07

标签: c++ c

void * memset ( void * ptr, int value, size_t num );

memset()将ptr的第一个num字节设置为value。我想使用memset()将void buffer的所有字节设置为:

00000000
11111111
10101010
01010101

对于“00000000”,我可以使用

memset(buffer, '0', BUF_LENGTH);

但我是正确的假设

memset(buffer, '1', BUF_LENGTH);

不会以“11111111”结尾,而是以“00000001”结尾?我读过'-1'可以解决问题,但为什么呢?我需要设置按位10101010或01010101的价值是多少?

2 个答案:

答案 0 :(得分:6)

memset以逐字节为基础运行。

将内存使用归零:

memset(buffer, 0, BUF_LENGTH);

要将每个字节设置为值1,请使用:

memset(buffer, 0x01, BUF_LENGTH);

对于二进制模式10101010,请使用:

memset(buffer, 0xAA, BUF_LENGTH);

对于二进制模式01010101,请使用:

memset(buffer, 0x55, BUF_LENGTH);

要将缓冲区中的所有位设置为1,请使用:

memset(buffer, 0xFF, BUF_LENGTH);

BUF_LENGTH将是数组定义中使用的长度,例如

#define BUF_LENGTH 256
char buffer[BUF_LENGTH];

或您在动态内存分配中用作长度的内容:

#define BUF_LENGTH 256
char *buffer = malloc(BUF_LENGTH);

不要在代码示例中引用0,因为它表示ascii字符“0”,其值为0x30(请参阅http://www.asciitable.com/)。

答案 1 :(得分:1)

如果这是C ++,请使用二进制文字,例如0b101010100b01010101

如果是C,请翻译为十六进制,0xAA0x55

(使用'0''1'很可能分别导致00110000和00110001。)