none
[C#]資料轉型問題 RRS feed

  • 問題

  • 各位您好:

    本人目前在寫個 TCP 封包傳輸程式
    因為TCP只能用byte[]傳送
    而要溝通的機器需用HEX
    需要hex轉成ASCII再把他轉成byte[]傳送

    例如:
    string hexValues = "00 00 00 00 00 06 04 03 9c 40 00 01";
    string[] hexValuesSplit = hexValues.Split(' ');
    foreach (String hex in hexValuesSplit)
    {
    // Convert the number expressed in base-16 to an integer.
    int value = Convert.ToInt32(hex, 16);
    // Get the character corresponding to the integral value.
    stringValue = stringValue +Char.ConvertFromUtf32(value);
    }

    問題出在Char.ConvertFromUtf32(value);
    不論我怎麼弄,部分邊碼都會被轉成3f
    上述範例中的9c就會轉成3f
    請問各位有無建議?
    謝謝
    2012年8月18日 上午 02:46

解答

所有回覆

  • Convert.ToByte 方法 (String, Int32)

    http://msdn.microsoft.com/zh-tw/library/c7xhf79k.aspx

    直接把十六進位字串轉成Byte,不要轉成Char,Char是7位元,最大是7F...

    • 已標示為解答 layak 2012年8月18日 下午 12:33
    2012年8月18日 上午 04:37
  • 如果您所指的HEX是16進位的意思, 可以直接以byte陣列的方式傳遞, 對方再當做16進位的數字處理即可
    2012年8月18日 上午 07:34
  • 一般來說,用 Encoding.ASCII.GetBytes(hexValues) 得到的 Byte[] 就是你要的,如果不是,應該把此台機器通訊協定相關部分摘出來才能討論。

    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    2012年8月18日 上午 09:40
  • 感謝您的回覆

    我想應該是你講的問題

    我會在試試看

    謝謝

    2012年8月18日 上午 11:30