2013-12-21 4 views
-1

Я имею дело с периферийным оборудованием, которое предоставляет доступные для записи характеристики для измеряемой мощности. Согласно спецификациям от поставщика аппаратного обеспечения, измеренная мощность должна быть отправлена ​​в формате «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)]; 
+0

В какой переменной отрицательное число (-59) вы хранящий? вы храните в char или int? каково максимальное значение, которое может принять переменная? –

+0

Вы уверены, что вам нужно ** два ** байта и шестнадцатеричное представление? Я бы предположил, что то, что ожидает устройство, является скорее ** одним ** байтом, представленным как целое число со знаком дополнения 2. (И шестнадцатеричное обозначение доступно только для удобства чтения). –

+0

@ H2CO3 Вы правы. Это всего лишь один байт. И я не уверен, как отправить отрицательное целое число в один байт. Есть идеи? – Abhinav

ответ

1
I am not sure how do we convert a negative integer (-59) into 2 bytes hex representation (0xnn). 

Если у вас есть два байта шестнадцатиричное представление, что означает, что вы можете иметь диапазон 0x0000 ~ 0xFFFF чисел или 0~65535 для неотрицательных целых чисел или в 2 в комплемента представлении -32768 ~ 23767.

Используя представление дополнения 2 -59 в двухбайтовом шестнадцатеричном формате будет 0xFFC5.

Также проверьте, если вам действительно нужно использовать это: «CFSwapInt16HostToBig»

+0

Я пробовал это. Отправка 0xFFC5 достигает 0xFF на устройстве, которое равно 255 в десятичной системе. Кроме того, я исправил свой вопрос. Это не 2 байта, это всего лишь 1 байт, мне нужно отправить -59. – Abhinav

+0

Ну, сначала вам нужно определить, действительно ли устройство действительно является дополняющим устройством. Это может быть дополнением 1, это может быть знак/величина. –

+0

@Abhinav Okay .. thats – tod

Смежные вопросы