void * memset ( void * ptr, int value, size_t num );
memset()
将 ptr 的前 num 个字节设置为值。我想使用 memset()
将 void 缓冲区的所有字节设置为:
00000000
11111111
10101010
01010101
对于“00000000”我可以使用
memset(buffer, '0', BUF_LENGTH);
但是我可以假设吗
memset(buffer, '1', BUF_LENGTH);
不会以“11111111”结尾,而是以“00000001”结尾?我读过 '-1' 可以解决问题,但为什么呢?我需要按位设置什么值 10101010 或 01010101?
最佳答案
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/)。
关于c++ - memset() 中将 int 值转换为 unsigned char 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37564351/