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  }