从十六进制转换为带符号的int不起作用

时间:2019-01-16 07:47:21

标签: python-3.x hex

我正在尝试将此十六进制字符串% Mock data, since you haven't provided a data sample x = randn(200,50); y = randn(200,50); z = randn(200,50); % Plot first frame before loop HS = scatter3(x(:,1), y(:,1), z(:,1)); hold on % Provide initial axes limits (adjust to your data) xlim([-5,5]) ylim([-5,5]) zlim([-5,5]) % Set 'LimModes' to 'manual' to prevent auto resaling of the plot set(gca, 'XLimMode', 'manual', 'YLimMode', 'manual', 'ZLimMode', 'manual') for i=2:len(x,2) scatter3(x(:,i), y(:,i), z(:,i)) pause(1) end 转换为带符号的整数。
所以我应该得到结果F1

我在这里拥有此Python函数,该函数运行良好,但不适用于此字符串-15

代码:

F1

例如,如果我将def get_signed_value(value): return -(value & 0x8000) | (value & 0x7fff) 作为值传递,那么我将得到FF5F作为正确的响应。
但是,如果我通过-161,则会得到F1作为响应,这不是正确的值。

1 个答案:

答案 0 :(得分:2)

您的函数设计用于值为−32.768 (0x8000) to 32.767 (0x7fff)的16位数字,而0xf1仅为值为-128 (0x80) to 127 (0x7f)的8位数字。因此,该函数中的return语句无法正确应用。

您必须根据十六进制数中的位数更改功能。对于8位:

def get_8bit_signed_value(value):
    return -(value & 0x80) | (value & 0x7f)

然后

get_8bit_signed_value(int('0xf1', 16))

-15返回所需的0xf1。您可以通过用nbits

计算值范围限制,来自动对具有1 << (nbits-1)位的位数进行此功能