|
发表于 2023-3-4 10:38:28
|
显示全部楼层
 - func (ic *Iconv) convert(input []byte, out io.Writer, outBuf []byte) (bytesConverted int, err error) {
- inputLen := len(input)
- if inputLen == 0 {
- return
- }
- outputLen := len(outBuf)
- if outputLen == 0 {
- outputLen = inputLen
- outBuf = make([]byte, outputLen)
- }
- outputPtr := &outBuf[0]
- outputPtrPtr := (**C.char)(unsafe.Pointer(&outputPtr))
- outputBytesLeft := C.size_t(outputLen)
- inputPtr := &input[0]
- inputPtrPtr := (**C.char)(unsafe.Pointer(&inputPtr))
- inputBytesLeft := C.size_t(inputLen)
- _, err = C.iconv(ic.pIconv, inputPtrPtr, &inputBytesLeft, outputPtrPtr, &outputBytesLeft)
- bytesConverted = inputLen - int(inputBytesLeft)
- if int(outputBytesLeft) < outputLen {
- out.Write(outBuf[:outputLen-int(outputBytesLeft)])
- }
- return
- }
复制代码 |
|