[英]warning: conversion to 'unsigned char' from 'int' may alter its value
[英]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 ++,请使用二进制文字,例如0b10101010
和0b01010101
。
如果是C,则转换为十六进制0xAA
和0x55
。
(使用'0'
和'1'
最有可能分别导致00110000和00110001。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.