0
我正在嘗試開發一個Android應用程序,它的功能和使用C++編寫的函數一樣,可以在手機和遠程以太網接口之間進行通信(我不知道它到底是什麼......) 。在Android中翻譯C++函數
我知道我必須傳遞給接口15個字節,從十六進制值中檢索,試點連接到接口的一些負載。
我已經嘗試了一些東西,最接近正確的解決方案似乎是這樣的一個:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://192.168.2.100:1001");
try {
//String message "AA10A0F0F0FFFF0102FF00010091A5";
byte[] messaggioInBytes={(byte)10101010, //AA
(byte)00010000, //10
(byte)10100000, //A0
(byte)11110000, //F0
(byte)11110000, //F0
(byte)11111111, //FF
(byte)11111111, //FF
(byte)00000001, //01
(byte)00000010, //02
(byte)11111111, //FF
(byte)00000000, //00
(byte)00000001, //01
(byte)00000000, //00
(byte)10010001, //91
(byte)10100101}; //A5
httppost.setEntity(new ByteArrayEntity(messaggioInBytes));
// Execute HTTP Post Request
httpclient.execute(httppost);
} catch(Exception e){
Log.i("ConnectionHandler", "Error", e);
}
這段代碼的以太網接口停止閃爍,並把自己聽,但它似乎沒有接收正確的字節命令字符串。
我的疑惑被連接到: 1.命令的格式發送 2.連接類型使用
我知道系統中的唯一的事情是,它使用本C效果很好++函數,所以我想知道是否有一種方法可以在Android的Java代碼中翻譯它,而不是使用Android NDK導入它。
C++函數如下:
void __fastcall TForm1::SendClick(TObject *Sender)
{
unsigned char Buffer[15];
AnsiString Line;
Buffer[0] = 0xAA;
...
Buffer[13] = 0x91;
Buffer[14] = 0xA5;
ClientSocket1->Socket->SendBuf(Buffer,15);
}
是否有任何人誰可以點我朝着正確的方向?
FWIW ,前導0導致「00010000」被解釋爲八進制值 - 實際上是32768,而不是10000. Java的行爲與C++相同。 – fadden
是的,我不確定,謝謝。無論哪種方式,值00010000都不是0x10。 – Harley
謝謝你的評論。經過一番努力,我才解決了這個問題。我測試了ClientSocket1-> Socket-> SendBuf(Buffer,15);相當於一個java套接字,我可以簡單地使用outputstream就像在C++中一樣發送字節。最後一個問題是我不得不考慮哈雷寫道,初始化字節數組的方式:我認爲有可能使用位,但是,然後用valueOf()打印值,我看到結果不是那些我期待找到的。有一件事我想知道更多的是在字節溢出的情況下會發生什麼:(byte)(buf [0] + ... + buf [n])> 255 –