递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 5754|回复: 10
打印 上一主题 下一主题

[视窗] 请教2进制取高10位与低6位写法

[复制链接]

84

主题

500

帖子

1900

积分

金牌会员

Rank: 6Rank: 6

积分
1900
跳转到指定楼层
楼主
发表于 2023-3-12 16:14:21 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 cdmmye 于 2023-3-12 17:18 编辑

这一段2进制 1011111100010100

取高10位 = 82

低6 = 5311


火山中怎么写,或者有什么模块支持,,请教各位前辈
火山PC HP_SOCKET 控件 交流群:956446702
回复

使用道具 举报

84

主题

500

帖子

1900

积分

金牌会员

Rank: 6Rank: 6

积分
1900
11#
 楼主| 发表于 2023-3-13 09:20:59 | 只看该作者
Xelloss0618 发表于 2023-3-12 23:03
呃,没写错啊,看了一下文章,这是一个短整数,高10位表示长度,低6位始终为0x3F,
这个值是这样计算的, ...

嗯明白了谢谢
火山PC HP_SOCKET 控件 交流群:956446702
回复

使用道具 举报

26

主题

1900

帖子

6926

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6926
10#
发表于 2023-3-12 23:03:24 | 只看该作者
cdmmye 发表于 2023-3-12 20:49
文章就这一句话

先解析开始的 BF 14 ,二进制为 0001 0100 10 @ 11 1111,高10位82,即为DoABC,低6为0x3 ...

呃,没写错啊,看了一下文章,这是一个短整数,高10位表示长度,低6位始终为0x3F,
这个值是这样计算的,比如长度是82,那就是:
位或 (位左移 (82, 6), 0x3F) = 0x14BF
由于内存是小端序,它会显示成 BF 14,这个你不用理会。

所以这个算法里,你只需要取高10位,知道长度就行了。
取高10位: 位右移动 (0x14BF, 6)  // 16位二进制,向左移动6位,剩下就是10位二进制的值了
取低6位也简单: 位与 (0x14BF, 0x003F)  // 低6位的最大值就是0x3F,与这个值位与,就能获取底6位的值
回复

使用道具 举报

84

主题

500

帖子

1900

积分

金牌会员

Rank: 6Rank: 6

积分
1900
9#
 楼主| 发表于 2023-3-12 20:49:16 | 只看该作者
Xelloss0618 发表于 2023-3-12 20:41
这图就没毛病了,内存是小端序,所以这个值实际上是 0x14BF,这不需要反转字节序。
取高10位也是正确的, ...

文章就这一句话

先解析开始的 BF 14 ,二进制为 0001 0100 10 @ 11 1111,高10位82,即为DoABC,低6为0x3F,为长类型

不会是文章自身写错了吧,看的很糊涂
火山PC HP_SOCKET 控件 交流群:956446702
回复

使用道具 举报

26

主题

1900

帖子

6926

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6926
8#
发表于 2023-3-12 20:41:30 | 只看该作者
cdmmye 发表于 2023-3-12 18:49
我也是被搞懵了,百度看的算法就是这么说的,怎么算都不对,所以发帖求助

这图就没毛病了,内存是小端序,所以这个值实际上是 0x14BF,这不需要反转字节序。
取高10位也是正确的, 位右移 (0x14BF, 6)
取低6位就不知道是哪个了,文章我也没看到
回复

使用道具 举报

84

主题

500

帖子

1900

积分

金牌会员

Rank: 6Rank: 6

积分
1900
7#
 楼主| 发表于 2023-3-12 18:51:42 | 只看该作者
Xelloss0618 发表于 2023-3-12 17:49
也不对啊,那个 5311 是 0xBF14 反转字节序得出的值,根本不是低6位(6位二进制的最大值是63)。
高10位算 ...

0xBF14 反转字节序得出的值 你说的是对的,我看了也应该是,百度说的是低6位我看的很糊涂
火山PC HP_SOCKET 控件 交流群:956446702
回复

使用道具 举报

84

主题

500

帖子

1900

积分

金牌会员

Rank: 6Rank: 6

积分
1900
6#
 楼主| 发表于 2023-3-12 18:49:31 | 只看该作者
Xelloss0618 发表于 2023-3-12 17:49
也不对啊,那个 5311 是 0xBF14 反转字节序得出的值,根本不是低6位(6位二进制的最大值是63)。
高10位算 ...

我也是被搞懵了,百度看的算法就是这么说的,怎么算都不对,所以发帖求助


火山PC HP_SOCKET 控件 交流群:956446702
回复

使用道具 举报

26

主题

1900

帖子

6926

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6926
5#
发表于 2023-3-12 17:49:17 | 只看该作者
也不对啊,那个 5311 是 0xBF14 反转字节序得出的值,根本不是低6位(6位二进制的最大值是63)。
高10位算是对了,但那也是反转字节序后再取高10位才能得到的值

位或 (位左移 (位与 (数值, 0x00FF), 8), 位右移 (位与 (数值, 0xFF00), 8)) = 5311 = 0x14BF
位右移 (0x14BF, 6) = 82
回复

使用道具 举报

84

主题

500

帖子

1900

积分

金牌会员

Rank: 6Rank: 6

积分
1900
地板
 楼主| 发表于 2023-3-12 17:23:40 | 只看该作者
Xelloss0618 发表于 2023-3-12 16:50
这个二进制跟你说的高低位根本对不上,另外 0x3F = 932 ?这肯定是错的啊

倒序16进制也没取对2进制

BF 14 ,二进制为 0001 0100 10 @ 11 1111,高10位82,即为DoABC,低6为0x3F

这是说的算法,我怎么处理也取不出这样的二进制
火山PC HP_SOCKET 控件 交流群:956446702
回复

使用道具 举报

84

主题

500

帖子

1900

积分

金牌会员

Rank: 6Rank: 6

积分
1900
板凳
 楼主| 发表于 2023-3-12 17:19:16 | 只看该作者
Xelloss0618 发表于 2023-3-12 16:50
这个二进制跟你说的高低位根本对不上,另外 0x3F = 932 ?这肯定是错的啊

抱歉那是我写错了

取高10位 = 82

低6 = 5311

十六进制为 BF14
火山PC HP_SOCKET 控件 交流群:956446702
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-24 15:15 , Processed in 0.103500 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表