gpt4 book ai didi

c++ - 使用 std::copy 将两个字节从 char 数组复制到 unsigned short

转载 作者:太空狗 更新时间:2023-10-29 23:28:45 26 4
gpt4 key购买 nike

我有一个二进制数组 char buffer[N];,它包含两个字节,在其开头被解释为一个无符号短整型,目前正在通过执行提取这些字节

unsigned short size= 0;
memcpy((char *) &size, buffer, sizeof(unsigned short));

但是我想为此使用 std::copy 。这可能吗?

像这样的尝试

std::copy(buffer, buffer+sizeof(unsigned short), (char *) &size);

编译时出现各种错误..

编辑: 抱歉,我匆忙忘记了:这是在带有 gcc 4.4.3 的 Ubuntu GNU/Linux 系统上。错误消息是 Error: Invalid conversion from ‘char*’ to ‘char’

最佳答案

您不应该为此使用任何类型的批量复制例程,也不应该使用类型转换来获取指向 unsigned short 的指针,因为这些选项都不考虑字节顺序。从 char[] 缓冲区中提取两字节无符号整数的正确方法是使用以下函数之一:

unsigned short extract_littleend16(const unsigned char *buf)
{
return (((unsigned short)buf[0]) << 0) |
(((unsigned short)buf[1]) << 8);
}

unsigned short extract_bigend16(const unsigned char *buf)
{
return (((unsigned short)buf[0]) << 8) |
(((unsigned short)buf[1]) << 0);
}

std::copymemcpy 和直接指针 bashing 都将做与这些函数中的一个相同的事情,但是你不知道它会是哪个,任何时候你有这个任务,这些功能之一是正确的,另一个是错误的。此外,如果您不知道从上下文中需要哪一个,请提高几个设计级别并弄清楚。

关于c++ - 使用 std::copy 将两个字节从 char 数组复制到 unsigned short,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7957381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com