比较uint8_t与int在c ++和memcpy中

问题描述 投票:-2回答:1

我有一个类成员reader,我想使用memcpy将const char *复制到它:

void copy(const char* b, int len){
    // len is length that i want to copy to reader.
    uint8_t maxLength = 256;
    char reader[maxLength]; 
    memcpy(&reader, b, len <= maxLength ? len : maxLength);
}

我测试了它,我认为这可行。我有两个问题:1.我可以在C ++中将uint8_t与int进行比较吗?我在这里比较它们。执行“ <=”时,是否会将uint8_t转换为int?会不会有任何使它成为错误的错误案例?2.在memcpy功能文档中说void * memcpy ( void * destination, const void * source, size_t num );最后一个参数是“ size_t”,我是否应该将最后一行设为:

memcpy(&reader, b, (int)len <= maxLength ? len : maxLength);

  memcpy(&reader, b, (size_t)len <= maxLength ? len : maxLength);

size_t size = len <= maxLength ? len : maxLength;
 memcpy(&reader, b, size);

哪个是正确的?在我的测试用例中,它们都通过了,但是我不知道是否会有任何特殊情况使某些方法不起作用。

c++ memcpy
1个回答
0
投票

如果len为负,则将其转换为大正数。显然,您知道长度,并且不想使用负数。因此,将len转换为无符号的size_t。您可以使用std::min选择两个数字中较小的一个。

std::min
© www.soinside.com 2019 - 2024. All rights reserved.