在python中附加2个十六进制值不起作用

时间:2018-01-26 15:15:26

标签: python

假设我有两个给定的十六进制值,它们是str作为数据类型:

@RequestMapping(method = RequestMethod.GET, params = {"clearForm"})
public String clearForm(@ModelAttribute("parking") Parking parking, WebRequest request, SessionStatus sessionStatus) {
    sessionStatus.setComplete();
    request.removeAttribute("parking", WebRequest.SCOPE_SESSION);
    return "redirect:/" +VIEW_PARKING;
}

现在我想追加它们,以便我得到结果:

a = 0x15
b = 0x18

通常的方法是将值转换为int以便能够追加,如:

0x1518

我收到了错误:

(hex( (int(a)<<8) | int(b) ))

我在这里做错了什么?

4 个答案:

答案 0 :(得分:2)

您需要告诉int这些数字是基数16:

hex((int(a, 16) << 8) | int(b, 16))

答案 1 :(得分:1)

a和b是已经不必投射它们的int值

hex_value = hex(a << 8 | b)

如果它仍然无法工作,您可以使用字符串格式将int转换为十六进制

hex_value = '0x{:04x}'.format(a << 8 | b)

答案 2 :(得分:0)

您正在运行的代码不是您发布的代码。(您发布的内容,工作正常)。

你的&#39; a&#39;不是你想的那样。您正在尝试提供字符串&#34; 0x15&#34;到int()函数,它理所当然地告诉你,这不是基数10表示法的整数。

修复变量类型并删除int()调用。

答案 3 :(得分:0)

您发布的代码运行正常。我不知道你从哪里得到错误。

在旁注中,ab不是字符串;它们已经是int类型,因此无需进行类型转换。您可以验证这一点:

>>> a = 0x15
>>> type(a)
<class 'int'>

删除不必要的类型转换,获得(hex(a << 8 | b )),这将为您提供正确的结果。