2013-12-21 55 views
-1

我正在處理一個爲測量功率提供可寫特性的硬件外設。根據硬件供應商測量功率的規格應該以格式「0xnn」發送。我不知道如何將負整數(-59)轉換爲1字節的十六進制表示(0xnn)。向外設寫入負整數作爲0xnn十六進制

到目前爲止,我已經嘗試下面

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存儲的?變量可以採用的最大值是多少? – 2013-12-21 06:39:12

+0

您確定需要**兩個**字節和十六進制表示嗎?我假設設備期望的是** **一個**字節,表示爲2的補碼有符號整數。 (十六進制符號僅僅是爲了人類的可讀性。) – 2013-12-21 06:39:23

+0

@ H2CO3你是對的。它只是一個字節。我不知道如何發送單字節的負整數。任何想法? – Abhinav

回答

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

當你有十六進制表示的兩個字節,這意味着你可以有非負整數或2的補表示-32768 ~ 23767範圍0x0000 ~ 0xFFFF數字或0~65535的。

通過使用2的補碼錶示-59在兩個字節十六進制將是0xFFC5

還要檢查,如果你真的需要使用這樣的:「CFSwapInt16HostToBig」

+0

我曾試過這個。發送0xFFC5的設備在十進制數爲255時達到0xFF。另外,我糾正了我的問題。它不是2個字節,它只有1個字節,我需要發送-59英寸。 – Abhinav

+0

嗯,首先你需要確定設備是否確實是2的補充設備。它可能是1的補碼,它可能是符號/幅度。 –

+0

@Abhinav好的..多數民衆贊成在 – tod