github.com/kbinani/win@v0.3.0/win.go (about) 1 package win 2 3 import ( 4 "unicode/utf16" 5 "unsafe" 6 ) 7 8 func unicode16FromString(s string) []uint16 { 9 r := make([]rune, 0) 10 for _, c := range s { 11 r = append(r, c) 12 } 13 b := utf16.Encode(r) 14 return append(b, uint16(0)) 15 } 16 17 func stringFromUnicode16(s *uint16) string { 18 if s == nil { 19 return "" 20 } 21 buffer := []uint16{} 22 ptr := uintptr(unsafe.Pointer(s)) 23 for true { 24 ch := *(*uint16)(unsafe.Pointer(ptr)) 25 if ch == 0 { 26 break 27 } 28 buffer = append(buffer, ch) 29 ptr += unsafe.Sizeof(ch) 30 } 31 return string(utf16.Decode(buffer)) 32 }