[cmucl-imp] string-to-octets

Helmut Eller heller at common-lisp.net
Sun Oct 30 23:40:17 CET 2011


* Helmut Eller [2011-10-30 18:28] writes:

> * Raymond Toy [2011-10-30 16:30] writes:
>
>>> I'm not sure that I understand the purpose of the 18.  Is this something
>>> that is needed later?
>>
>> Yeah, that was kind of messy.  This is what I currently have:
>>
>> * (let ((buffer (make-array 20 :element-type '(unsigned-byte 8)))
>>            (string (make-string 100  :initial-element #\u+f012)))
>>        (stream:string-to-octets string :external-format :utf8 :buffer
>> buffer))
>>
>> #(239 128 146 239 128 146 239 128 146 239 128 146 239 128 146 239 128
>> 146 239
>>   128)
>> 18
>> 6
>>
>> So 18 is the number of valid octets actually written.  (The last two
>> octets form an incomplete conversion.)   The 6 is the number of
>> characters consumed to produce those 18 octets.
>>
>> For the case where no buffer is specified, a new buffer is created and
>> the second return value is the number of octets written (same as the
>> buffer length), and the third value is the number of characters (length
>> of the string).
>>
>> Is that better?
>
> Yes, looks good.

BTW, it would also be useful to have a parameter to specify a start
position in buffer.  With that it would be possible to buffer up
multiple small chunks.

Helmut




More information about the cmucl-imp mailing list