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的价值是多少?
答案 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 ++,请使用二进制文字,例如0b10101010
和0b01010101
。
如果是C,请翻译为十六进制,0xAA
和0x55
。
(使用'0'
和'1'
很可能分别导致00110000和00110001。)