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

golang語言自己就是c的工具集,開發c的程序用到的大部分結構體,內存管理,攜程等,golang基本都有,他只是在這個基礎上又加了一些概念這裏說一個很小的問題,就是字節數組轉string的問題,網上大部分都是這樣轉的(包括google上):string(p[:]),這個轉完了是有問題的,咱們再來看一下string這個結構體:nginx

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

這個結構體讓我想起了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)
}google

這樣就不會出問題了spa

相關文章
相關標籤/搜索