如果我想通過網絡傳輸帶符號的長整型(32位整數),我該怎麼做?如果我在另一端以很長的簽名發送,我將不知道(可能)遠程機器如何表示簽名數字?那麼我該怎麼做?爲什麼沒有套接字ntol來簽名long?
回答
因爲ntohl()
運行在字節順序的,所以也沒有在意的跡象,一切關心是多少位在那裏。以標題回答問題。
要回答這個問題:「我該怎麼辦?」除了指出你提出的問題之外 - 你將它轉換爲無符號的,然後再轉換回另一個符號,因爲除了不知道它是否已簽名,任意遙控器也不知道這個號碼是關於什麼以及你的特定遠程可能對這件事更瞭解。
行,所以我想我可以送的是隻要我將它標記爲在另一端簽署,我將做必要的事情來轉換回來。 –
如果編譯器堅持,你可以在執行'htonl'之前將它強制轉換爲'unit32_t',然後在通過'ntohl'處理時對其進行簽名。 –
如果兩個系統使用負整數不同的表示(例如二進制補碼,符號 - 量值),然後發送號碼爲字符串,並將其解析爲接收器上的整數。效率不高,但除非您傳輸大量數字,否則無關緊要。如果有很多數字要傳輸,則可以使用某種形式的壓縮。
另外,定義自己的網絡表示爲負數,寫自己的ntohsl
和htonsl
。
在任一種方法,將存在不能在其他被表示每個系統上的一個號碼;您需要決定接收此號碼時適當的行動方案。
根據POSIX,整數類型'intN_t'必須是二進制補碼。 'ntohl'函數是POSIX的一部分。 –
@DietrichEpp:ISO C也要求它們是二進制補碼,並且最大負值是有效的(而不是陷阱)。 –
將整數轉換爲字符串並再次返回聽起來像是一個非常低效的前進方向。 –
只需使用ntohl
和htonl
和鑄造或隱式轉換來回uint32_t
和int32_t
之間。
- 1. 爲什麼BigInteger(String)沒有BigInteger(long)?
- 2. 爲什麼套接字的另一側沒有關閉套接字? (CLOSE_WAIT)?
- 3. 爲什麼我的套接字沒有收到響應?
- 4. 爲什麼strncmp沒有比較?套接字編程C
- 5. 套接字,BufferedReader.readline() - 爲什麼流沒有準備好?
- 6. 爲什麼Ruby的select沒有返回套接字?
- 7. 爲什麼這個套接字爲空?
- 8. POSIX套接字和BSD套接字有什麼區別?
- 9. 套接字 - 爲什麼beginRecieve塊?
- 10. C#套接字:爲什麼socket.LocalEndPoint更改?
- 11. 爲什麼HttpClient將套接字打開?
- 12. 來自多核的套接字有什麼好處? (Linux)
- 13. 爲什麼不是common_type <long,unsigned long> :: type = long long?
- 14. 爲什麼我的客戶端套接字沒有收到我的服務器套接字發送的內容?
- 15. 爲什麼在子簽名中有2()?
- 16. 爲什麼有兩個std :: forward簽名?
- 17. Java:爲什麼「long」原始類型不接受簡單數字?
- 18. 爲什麼std :: get沒有一個接受轉發參考的簽名
- 19. 電子簽名和數字簽名有什麼區別?
- 20. 爲什麼JSTL中沒有「c:else」標籤?
- 21. FacesComponent沒有一套名爲
- 22. 爲什麼Long值在java中沒有正確打印?
- 23. 爲什麼我的C++程序集沒有簽名?
- 24. 爲什麼沒有將特例添加到簽名中?
- 25. 爲什麼沒有這個函數簽名類型檢查?
- 26. 套接字沒有意義?
- 27. 爲什麼我們在有端口號時需要套接字名稱?
- 28. 爲什麼String.Length被簽名?
- 29. 爲什麼SO_RCVTIMEO從偵聽套接字繼承到接受的套接字?
- 30. 爲什麼看完後服務器端套接字沒有收到消息
告訴他們如何解釋它。的[符號整數網絡和主機轉換] –
可能重複(http://stackoverflow.com/questions/4878781/signed-integer-network-and-host-conversion) – outis