I have an issue where blackboxprotobuf takes response of protobuf & returning the dictionary where i see few values where suppose to be negative instead coming as positive value. Calling an APi with lat (40.741895) & long(-73.989308). Using these lat & long, a key is genereated '81859706' that be used in the api. For Key Generation we are using paid framework. url = "https://gspe85-ssl.ls.apple.com/wifi_request_tile" response =requests.get(url, headers={ 'Accept': '*/*', 'Connection': 'keep-alive', 'X-tilekey': "81859706", 'User-Agent': 'geod/1 CFNetwork/1496.0.7 Darwin/23.5.0', 'Accept-Language': 'en-US,en-GB;q=0.9,en;q=0.8', 'X-os-version': '17.5.21F79' })  Which returns protobuf as response. For the same using blackboxprotobuf to convert protobuf_to_json snippet message, typedef = blackboxprotobuf.protobuf_to_json(response.content) json1_data = json.loads(message)  Response:  "2": [ { "4": { "2": { "1": 1, "2": 1 } }, "5": 124103876854927, "6": { "1": 407295068, "2": 3555038608 //This values should be negative } },  Any help how to debug this response & fix this issue. Thank you
The bit value that comes for the number is >>> bin(3555038608) '0b11010011111001011001010110010000'  If you take 2s complement of that number, you will get the negative that you want. >>> def twos_comp(val, bits): ... """compute the 2's complement of int value val""" ... if (val & (1 << (bits - 1))) != 0: # if sign bit is set e.g., 8bit: 128-255 ... val = val - (1 << bits) # compute negative value ... return val # return positive value as is ... >>> twos_comp(3555038608, 32) -739928688  If you know the bit length of coordinates, in this case 32. Since its an int. You can convert it back, using this.