gpt4 book ai didi

c++ - 连接不同长度的二进制数

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:00:05 27 4
gpt4 key购买 nike

所以我有 3 个数字。一个是 char,另外两个是 int16_t(也称为 short,但根据表格我发现 shorts 不会可靠地是 16 位)。

我想将它们连接在一起。所以说他们的值(value)观是:

10010001

1111111111111101

1001011010110101

我想以一个 long long 结束,其中包含:

1001000111111111111111011001011010110101000000000000000000000000

使用我在网上找到的一些解决方案,我想到了这个:

long long result;
result = num1;
result = (result << 8) | num2;
result = (result << 24) | num3;

但它不起作用;它在解码时给了我非常奇数。

万一我的解码代码有问题,这里是:

char num1 = num & 0xff;
int16_t num2 = num << 8 & 0xffff;
int16_t num3 = num << 24 & 0xffff;

这是怎么回事?我怀疑它与 long long 的大小有关,但我不能完全理解它,我希望稍后在其中容纳更多数字。

最佳答案

要按照您的要求获得正确的位模式,您应该使用:

result = num1;
result = (result << 16) | num2;
result = (result << 16) | num3;
result<<=24;

这将产生您请求的确切位模式,24 位在 lsb-end 左边 0:

1001000111111111111111011001011010110101000000000000000000000000

关于c++ - 连接不同长度的二进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13222374/

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