[pro] write-char vs. 8-bit bytes

raito at raito.com raito at raito.com
Fri Apr 11 02:45:59 UTC 2014


I end up doing something like:

(defmacro with-open-binary-file (args &rest rest)
  `(with-open-file (, at args :element-type '(unsigned-byte 8)) , at rest))

(defun write-word (word out)
  (write-byte (ldb (byte 8 8) word) out)
  (write-byte (ldb (byte 8 0) word) out))

only because I'm exclusively writing binary stuff to the files this code
serves, and because it parallels the C code that does the same thing
fairly well. I'm not writing to a socket stream, but this may help anyway.
It might need to account for endianness, but I'm not sure. It's been a
while since I've looked at it closely.

Neil Gilmore
raito at raito.com

> I can't easily verify right now, but check the :external-format on your
> stream: it may be defaulting to UTF-8 and you will need to specify
> something else.
>
>     -tree
>
> Sent from my iPhone
>
>> On Apr 10, 2014, at 10:31, Paul Tarvydas <paultarvydas at gmail.com> wrote:
>>
>> I'm using sbcl to write-char a 16-bit unsigned integer to a socket as
>> two separate unsigned 8-bit bytes, for example 141 should appear as
>>
>> #x00 #x8d.
>>
>> SBCL appears to convert the #x8d into a two-byte utf-8 char, resulting
>> in 3 bytes written to the stream
>>
>> \#x00 #xcd #x8d.
>>
>> What is the proper incantation to achieve this?  (SBCL on Windows, if
>> that matters).
>>
>> thanks
>> pt
>>
>>
>> _______________________________________________
>> pro mailing list
>> pro at common-lisp.net
>> http://common-lisp.net/cgi-bin/mailman/listinfo/pro
>
> _______________________________________________
> pro mailing list
> pro at common-lisp.net
> http://common-lisp.net/cgi-bin/mailman/listinfo/pro
>






More information about the pro mailing list