rust - 如何将字节转换为正确的十进制表示?
问题描述
我有一个函数可以检查字符串的特定索引中的位(转换为字节表示):
fn check_bit(s: String) -> bool {
let bytes = s.as_bytes(); // converts string to bytes
let byte = s[0]; // pick first byte
// byte here seems to be in decimal representation
byte | 0xf7 == 0xff // therefore this returns incorrect value
}
在对变量进行打印和算术运算后byte
,我注意到这byte
是一个十进制数。例如,对于 char b
(的 ASCII 值0x98)
,byte
存储98
为十进制,这会在对它们进行按位运算时导致值不正确。如何将此十进制值转换为正确的十六进制、二进制或十进制表示?(因为0x98
我希望获取152
)的十进制值
解决方案
注意到这
byte
是一个十进制数
整数没有内在的基础,它只是内存中的一个位模式。您可以将它们以十进制、二进制、八进制等形式写在字符串中,但内存中的值是相同的。
换句话说,整数不作为字符串存储在内存中。
例如,对于 char b (0x98) 的 ascii 值,byte 只是将 98 存储为十进制
ASCIIb
不是0x98,是98,也就是0x62:
assert_eq!(98, 0x62);
assert_eq!(98, "b".as_bytes()[0]);
assert_eq!(98, 'b' as i32);
如何将此十进制值转换为正确的十六进制、二进制或十进制表示?
这样的转换没有意义,因为整数没有像上面解释的那样存储为字符串。
推荐阅读
- lightbox2 - 将通过 ajax 加载的新图像添加到打开的灯箱弹出窗口
- java - 错误:“找不到任何与版本“1.8”匹配的 JVM。”
- laravel - Laravel:当客户有多个记录时更新问题
- c++ - 无法使用 lcov 创建覆盖信息 警告:在 ./coverage 中找不到 .gcda 文件
- symfony - 如何限制 API 平台中嵌套实体的数量?
- node.js - 导入后未定义 Airtable
- c++ - 为什么在使用整数设置数组维度时必须将它们转换为整数?
- java - 如何在 Eclipse 中使用 Lombok 为复杂的 json 生成 pojo
- rust - 如何将当前 crate 中定义的宏导入 doc 测试?
- javascript - 如果对数据表起作用