假设我有两个给定的十六进制值,它们是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) ))
我在这里做错了什么?
答案 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)
您发布的代码运行正常。我不知道你从哪里得到错误。
在旁注中,a
和b
不是字符串;它们已经是int
类型,因此无需进行类型转换。您可以验证这一点:
>>> a = 0x15
>>> type(a)
<class 'int'>
删除不必要的类型转换,获得(hex(a << 8 | b ))
,这将为您提供正确的结果。