Я имею дело с периферийным оборудованием, которое предоставляет доступные для записи характеристики для измеряемой мощности. Согласно спецификациям от поставщика аппаратного обеспечения, измеренная мощность должна быть отправлена в формате «0xnn». Я не уверен, как мы преобразуем отрицательное целое число (-59) в 1-байтовое шестнадцатеричное представление (0xnn).Написание отрицательного целого числа как 0xnn hex на периферийное устройство
До сих пор я пытался ниже
int iPower = -59;
int16_t power = CFSwapInt16HostToBig(iPower);
NSData *powerData = [NSData dataWithBytes:&power length:sizeof(power)];
Но это пишет 0xFF в периферийных устройств, в десятичной системе 255. Есть идеи?
Даже попытался отправить сырые байты по нижнему коду, и это достигает 0xC5, который равен 197 десятичным.
NSInteger index = -59;
NSData *powerData = [NSData dataWithBytes:&index length:sizeof(index)];
В какой переменной отрицательное число (-59) вы хранящий? вы храните в char или int? каково максимальное значение, которое может принять переменная? –
Вы уверены, что вам нужно ** два ** байта и шестнадцатеричное представление? Я бы предположил, что то, что ожидает устройство, является скорее ** одним ** байтом, представленным как целое число со знаком дополнения 2. (И шестнадцатеричное обозначение доступно только для удобства чтения). –
@ H2CO3 Вы правы. Это всего лишь один байт. И я не уверен, как отправить отрицательное целое число в один байт. Есть идеи? – Abhinav