none
請問 Encoding.ASCII.GetBytes 自動 resize 的問題 RRS feed

  • 問題

  • string valueUp;
    byte[] dataUp = new byte[16];
    dataUp = Encoding.ASCII.GetBytes(valueUp);
    

    假設 valueUp = "text"

    Encoding.ASCII.GetBytes(valueUp); 結束後會自動 resize 變成 dataUp[4] (原本是 dataUp[16]

    (我的需求是把所有 string to byte)

    等於說 Encoding.ASCII.GetBytes 很貼心的自己幫你節省了陣列,

    but,我現在的需求是要維持原陣列的長度...。

    目前的解法是:

    for (int i = 0; i < dataUp.Length; i++)
    {
                    dataTempUp[i] = dataUp[i];
     }

    就是用另外一個 temp[16] 把 resize 的 dataUp 資料倒過去解決 (不過就是有點浪費的感覺)

    想請問各位前輩是否有相對優雅的方式可以處理這個問題?

    感謝<(_ _)>


    • 已編輯 iwdmb 2014年9月2日 下午 11:03 編輯
    2014年9月2日 下午 11:01

解答

  • 利用 GetBytes 多載
    var valueUp = "text";
    var dataUp = new byte[16];
    var length = Encoding.ASCII.GetBytes(valueUp,0, valueUp.Length,dataUp ,0);


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度


    • 已編輯 Alex_Lee 2014年9月3日 上午 01:07
    • 已提議為解答 KKBruceMVP 2014年9月3日 上午 01:44
    • 已標示為解答 iwdmb 2014年9月4日 上午 06:54
    2014年9月3日 上午 01:06
  • 陣列是參照變數

    用學生座號代替參照位置來說明

    學生 new byte[16] 座號為 1 (dataUp)

    學生Encoding.ASCII.GetBytes(valueUp) 座號為 1 (dataUp)

    所以這時你的學生 new byte[16] 已經沒座號了。

    你存取的座號 1 是 Encoding 這個。

    例如

    byteUp = Encoding.ASCII.GetBytes(valueUp);

    Array.Copy(byteUp, 0, dataUp, 0, byteUp.Length);

    為所求。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    • 已標示為解答 iwdmb 2014年9月4日 上午 06:54
    2014年9月3日 上午 11:16

所有回覆

  • 利用 GetBytes 多載
    var valueUp = "text";
    var dataUp = new byte[16];
    var length = Encoding.ASCII.GetBytes(valueUp,0, valueUp.Length,dataUp ,0);


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度


    • 已編輯 Alex_Lee 2014年9月3日 上午 01:07
    • 已提議為解答 KKBruceMVP 2014年9月3日 上午 01:44
    • 已標示為解答 iwdmb 2014年9月4日 上午 06:54
    2014年9月3日 上午 01:06
  • 陣列是參照變數

    用學生座號代替參照位置來說明

    學生 new byte[16] 座號為 1 (dataUp)

    學生Encoding.ASCII.GetBytes(valueUp) 座號為 1 (dataUp)

    所以這時你的學生 new byte[16] 已經沒座號了。

    你存取的座號 1 是 Encoding 這個。

    例如

    byteUp = Encoding.ASCII.GetBytes(valueUp);

    Array.Copy(byteUp, 0, dataUp, 0, byteUp.Length);

    為所求。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    • 已標示為解答 iwdmb 2014年9月4日 上午 06:54
    2014年9月3日 上午 11:16