当前位置: 首页 > 知识库问答 >
问题:

如何将一个无符号长整型(32位)拆分成8个半字节?

方永贞
2023-03-14

如果我的问题令人困惑,我很抱歉,但这是我想做的例子,

假设我有一个二进制的无符号long int=1265985549,我可以把它写成010010110010110100000001101

现在我想把这个32位二进制数分成4位,像这样,分别处理这4位

0100 1011 0111 0101 0110 1000 0000 1101

任何帮助都将不胜感激。

共有3个答案

岑和风
2023-03-14

根据解释其实际用途的注释,这里有另一种方法来计算有多少个半字节具有奇数奇偶校验:(未测试)

; compute parities of nibbles
x ^= x >> 2;
x ^= x >> 1;
x &= 0x11111111;
; add the parities
x = (x + (x >> 4)) & 0x0F0F0F0F;
int count = x * 0x01010101 >> 24;

第一部分只是常规的“xor all bits”类型的奇偶校验计算(其中“所有位”是指半字节中的所有位,而不是整个整数),第二部分基于此bitcount算法,跳过一些不必要的步骤,因为某些位总是零,因此不必添加

袁枫涟
2023-03-14
short nibble0 = (i >>  0) & 15;
short nibble1 = (i >>  4) & 15;
short nibble2 = (i >>  8) & 15;
short nibble3 = (i >> 12) & 15;

汤弘文
2023-03-14

您可以使用位操作在位置< code>k获得4位半字节,如下所示:

uint32_t nibble(uint32_t val, int k) {
    return (val >> (4*k)) & 0x0F;
}

现在你可以在一个循环中得到单个的小块,就像这样:

uint32_t val = 1265985549;
for (int k = 0; k != 8 ; k++) {
    uint32_t n = nibble(val, k);
    cout << n << endl;
}

ideone上的演示。

 类似资料:
  • (*在下面的帖子中,所有的IP、端口和密码都已更改。很抱歉这篇文章的格式,编辑似乎不喜欢新行。) 问题:如何将整数存储为带符号的32位小尾数? 背景:我试图使用RCon连接到bash中的minecraft服务器。到目前为止,服务器显示正在接收连接,但我无法正确格式化数据包。我可以使用mcrcon连接到服务器并在wireshark中查看数据包,但是当我尝试使用bash脚本时,数据包长度、reques

  • 我有一个字符串和一个ArrayList。字符串中有几个单词,用空格隔开,例如“firstword second third”。我想将字符串拆分为几个部分,并将“piece”字符串添加到ArrayList中。

  • 如果我有一个字符串,比如,是否可以使用作为字符串拆分的点,将字符串拆分为两个字符串?

  • 问题内容: 我需要在逗号处将字符串输入拆分为一个数组。 我该如何做到这一点? 输入: 问题答案: 尝试: 输出:

  • 问题内容: 在java中如何拆分一个字符串?如何使用split方法? 问题答案: “004-034556”为例用方法即可: 请注意,这需要一个正则表达式,因此请记住在必要时转义特殊字符。 _ 12个具有特殊含义的字符:反斜杠,插入符号,美元符号,句点或点,竖线或竖线符号,问号,星号或星号,加号,左括号,右括号,以及方括号,大括号,这些特殊字符通常称为“元字符”。 所以,如果你想在如期间分点.的意思

  • 我想通过分隔符将字符串分成两个字符串: 这意味着第一个字符串将包含之前的字符,第二个字符串将包括