golang byte轉string 字節數組轉字符串的問題


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)
}

這樣就不會出問題了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM