gpt4 book ai didi

c# - Python 中使用十六进制进行位移位

转载 作者:行者123 更新时间:2023-12-02 21:21:47 25 4
gpt4 key购买 nike

我试图了解如何在Python中执行位移操作。来自 C#,它的工作方式不同。

C# 代码是;

var plain=0xabcdef0000000; // plaintext
var key=0xf0f0f0f0f123456; // encryption key

var L = plain;
var R = plain>>32;

输出是;

000abcdef0000000 00000000000abcde

Python 中的等价物是什么?我已经尝试过了;

plain = 0xabcdef0000000
key = 0xf0f0f0f0f123456

print plain

left = plain
right = plain >> 32

print hex(left)
print hex(right)

但是,它不起作用。 Python 中的输出有所不同。 0 的填充丢失。任何帮助将不胜感激!

最佳答案

hex() 函数不会用前导零填充数字,因为 Python 整数无界。 C# 整数具有固定大小(在本例中为 64 位),因此具有上限,因此可以进行填充。这并不意味着那些额外的填充零具有任何意义;整数值相同

您必须使用 format() 函数显式添加这些零来生成输出:

print format(left, '#018x')
print format(right, '#018x')

# 告诉 format() 在字段之前包含 0x 前缀以及前导 0 width 要求 format() 填充输出:

>>> print format(left, '#018x')
0x000abcdef0000000
>>> print format(right, '#018x')
0x0000000000abcde

请注意,宽度包括 0x 前缀;该输出中有 16 个十六进制数字,代表 64 位数据。

如果您想根据key中使用的字符数使用动态宽度,请从 int.bit_length() 计算得出。 ;每 4 位产生一个十六进制字符:

format(right, '#0{}x'.format((key.bit_length() + 3) // 4 + 2))

演示:

>>> (key.bit_length() + 3) // 4 + 2
17
>>> print format(right, '#0{}x'.format((key.bit_length() + 3) // 4 + 2))
0x0000000000abcde

但请注意,即使 key 长度只有 60 位,C# 也会用 0 填充该值。

关于c# - Python 中使用十六进制进行位移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27128104/

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