golang byte轉string 位元組數組轉字串的問題

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

golang語言本身就是c的工具集,開發c的程式用到的大部分結構體,記憶體管理,攜程等,golang基本都有,他只是在這個基礎上又加了一些概念這裡說一個很小的問題,就是位元組數組轉string的問題,網上大部分都是這樣轉的(包括google上):string(p[:]),這個轉完了是有問題的,我們再來看一下string這個結構體:

struct String
{
        byte*   str;
        intgo   len;
};

這個結構體讓我想起了nginx的string,他是這樣定義的:

typedef struct {
    size_t      len;
    u_char     *data;
} ngx_str_t;

golang裡邊 string的概念其實不是以前遇到\0結尾的概念了,他其實就是一塊連續的記憶體,首地址+長度,上面那樣賦值,如果p裡邊有\0,他不會做處理這個時候,如果再對這個string做其他處理就可能出問題了,比如strconv.Atoi轉成int就有錯誤,解決辦法就是需要自己寫一個正規的轉換函式:

func byteString(p []byte) string {
        for i := 0; i < len(p); i++ {
                if p[i] == 0 {
                        return string(p[0:i])
                }
        }
        return string(p)
}

這樣就不會出問題了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.