繁体   English   中英

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

[英]How does the conversion of int value to unsigned char in memset() work?

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

memset()将ptr的前num个字节设置为value。 我想使用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);

请勿在代码示例中用引号引起来,因为这表示ASCII字符“ 0”,其值为0x30(请参见http://www.asciitable.com/ )。

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

如果是C,则转换为十六进制0xAA0x55

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM