Since you're using bytes and bytes literals I'm guessing you're on Python 3, in which case you have a much better general option for converting arbitrary runs of bytes into an int. Python 3 has an amazing all in one-converter. For your example case:
>>> int.from_bytes(b'\xff\xff\xce', 'big', signed=True)
-50
It scales to huge sizes, and runs faster than anything else available.
If you're not using Python 3, it's slightly uglier, but still fairly fast:
import binascii
def int_from_bytes(b):
x = int(binascii.hexlify(b), 16)
mask = 1 << (len(b) << 3) - 1
if x & mask:
x -= mask << 1
return x
Which gets the same results as the Python 3 built-in when you do:
>>> int_from_bytes(b'\xff\xff\xce')
-50
Note on performance: A pre-compiled struct.Struct will win, hands down, if it's really as simple as one pad byte followed by a signed short, no variable length nonsense. In that case, you'd precompile the Struct with:
unpacker = struct.Struct('>xh').unpack
Then you can use it like so:
x, = unpacker(b'\xff\xff\xce')
The trailing comma is important (Struct.unpack returns a len 1 tuple in this case, and assigning to x, unpacks the single value into x the most efficient way possible.