gpt4 book ai didi

c - 如何用整数中的另一组半字节替换给定的半字节

转载 作者:行者123 更新时间:2023-12-03 22:01:36 25 4
gpt4 key购买 nike

假设你有一个整数 a = 0x12345678 和一个短的 b = 0xabcd
我想要做的是用 integer a 中的半字节替换 short b 中的给定半字节

例如:a = 0x12345678 中的第 0、2、5、7 个半字节(其中 8 = 第 0 个半字节、7=第 1 个半字节、6=第 2 个半字节等...)替换为来自 b = 0xabcd 的半字节(其中 nibble,th =第一个半字节,b=第二个半字节等等......)

我的方法 是 -

  • 清除我们要从 a 替换的位。
    a = 0x02045070
  • 从短 b 创建掩码,如 mask = 0xa0b00c0d
  • 按位 OR 他们得到结果。 result = a| maskresult = 0xa2b45c7d 因此替换了半字节。

  • 我的问题 是我不知道任何 有效的 方法来从给定的 short b 创建所需的掩码(如第 2 步)

    如果你能给我一个 高效的 这样做的方式,这对我会有很大的帮助,我提前感谢你;)

    请询问是否需要更多信息。

    编辑:
    我解决问题的代码(虽然不够好)
    任何改进都受到高度赞赏。
    int index[4] = {0,1,5,7}; // Given nibbles to be replaced in integer
    int s = 0x01024300; // integer mask i.e. cleared nibbles
    int r = 0x0000abcd; // short (converted to int )
    r = ((r & 0x0000000f) << 4*(index[0]-0)) |
    ((r & 0x000000f0) << 4*(index[1]-1)) |
    ((r & 0x00000f00) << 4*(index[2]-2)) |
    ((r & 0x0000f000) << 4*(index[3]-3));
    s = s|r;

    最佳答案

    半字节有 4 位,根据您的索引方案,第零半字节由位置 0-3 的最低有效位表示,第一个半字节由位置 4-7 的最低有效位表示,依此类推。

    只需将值移动必要的数量。这将在变量索引设置的位置设置半字节:

    size_t index = 5;    //6th nibble is at index 5
    size_t shift = 4 * index; //6th nibble is represented by bits 20-23
    unsigned long nibble = 0xC;
    unsigned long result = 0x12345678;
    result = result & ~( 0xFu << shift ); //clear the 6th nibble
    result = result | ( nibble << shift ); //set the 6th nibble

    如果要设置多个值,请将此代码放入循环中。变量索引应该更改为值数组,变量半字节也可以是值数组,或者它可以包含多个半字节,在这种情况下,您可以通过向右移动值来逐个提取它们。

    关于c - 如何用整数中的另一组半字节替换给定的半字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41276917/

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