c++ - memset() 中将 int 值转换为 unsigned char 是如何工作的?

标签 c++ c

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/

相关文章:

c++ - return true 在 C++ 中返回 0

c++ - 访问器和修改器

c++ - Boost::signals2 - 描述带有插槽的对象

c - 使用 DirectSound 播放立体声 PCM

php - 如何解决这个重名错误?

c++ - 我如何将遗传算法应用于跟随过山车轨道的简单游戏?

c++ - Caffe 中的欧氏损失层

c - 不会过滤掉质数并在 c 中给出错误的因子编号

c - 使用 Visual Studio 2010 在 C 中返回失败类型

c - 将两个 128 位整数相乘