python - 从十六进制字符串中获取十进制值
问题描述
我在将十六进制值转换为十进制时遇到了一些麻烦。理论上很容易Python
:
value = '000100000001f8c65400fefe3195000001230000000000000000000000000000000000000000642b00090700000000001e'
print(int(value,16))
这是结果:
153914086775326342143664486282692693880080977757509806775956245674142536051238079779640236240803190331364310253598
因为这里一切都好。
这个字符串代表不同字节的有效负载,我知道两件事:
- 1 字节 = 8 位。
- 十六进制值通常用两个十六进制值表示,例如
FF 2E 32 etc
.
当我想使用一些具体的字节时问题就来了,因为理论上我知道在字节 18、19、20 和 21 中我有一些以 39 开头的十进制数(我不知道后面的其他数字)。但是当我想解码它时,我找不到它。
# First try
a = value[36:43] # 18*2 to 21*2
print(a)
print(int(a,16))
# Second try
a = value[18:22] # 18 to 21
print(a)
print(int(a,16))
用肉眼,我可以看到第一个结果中的第三个和第四个值是 this 39
,
153914086775326342143664486282692693880080977757509806775956245674142536051238079779640236240803190331364310253598
但另一次,如果我这样做
# third try
a = value[2:4]
print(a)
print(int(a,16))
我找不到这个 39,并且值与第一个结果不同。
我该怎么做?我确定这很容易,但我不知道该怎么做。我想学习访问不同的字节,但我不明白其中的逻辑。
编辑试图更好地解释它
我有这个十六进制有效载荷:
153914086775326342143664486282692693880080977757509806775956245674142536051238079779640236240803190331364310253598
这表示以字节为单位收集的不同值的集合。
因此,我尝试的是能够访问一个字节(或一组)以了解其十进制值。例如,我知道字节 18 到 21 是纬度,字节 39 是电池。我怎样才能解码它python
?
(在我的城市,纬度总是从 39 开始,这就是我之前所说的)
非常感谢
解决方案
您似乎对数字基础感到非常困惑。也请查找适当的术语。例如:
十六进制值通常用两个十六进制值表示,如 FF 2E 32 等
我不确定你想在这里说什么。您似乎已经注意到十六进制值通常被分成字节(每个十六进制数字是 4 位),但是您表达它的方式让我想知道您的意思。字节级分离不是“表示”;相反,它是一种阅读便利。
您的中心问题似乎是如何找到仅编码为十六进制版本的子序列的特定十进制子序列。您是否将字符编码(例如 ASCII、UniCode 或 EBCDIC)与简单的基本表示混淆了?字符编码允许您进行这种子字符串转换;更改数字基数根本不是相同的操作。例如:
base 16 base 10
1 1
21 33 = 2 * 16 + 1
B21 2849 = 11 * 16*16 + 2 * 16 + 1
B2 178 = 11 * 16 + 2
B 11
一个碱基中没有用另一个碱基中的子序列编码的子序列。例如,以 10 为底的“84”是整个十六进制数的符号特征,而不是任何子序列。
推荐阅读
- sublimetext3 - 在 sublime text 3 中找到文本后进行编辑
- mysql - MySQL在创建和插入数据时收到语法错误
- java - 避免在大型数据集上使用集合
- laravel - Laravel 集体表单到普通 html 表单
- here-api - 使用下载的地图搜索地址
- python - 将列与随附的标签列堆叠在一起
- c++ - 您可以将数组的子部分传递给函数吗?C++
- python - Python小写错误:'list'对象没有属性'str'
- python-3.x - 具有混合效应 ANCOVA 的 statsmodel 的最小二乘均值
- swift - 为计算属性添加 @Published 行为