簡體   English   中英

如何在usocket中創建特定類型的通用lisp(SBCL)向量?

[英]How to create a common lisp (SBCL) vector of a particular type for usage in a usocket?

我是Common Lisp的新手,我正在嘗試學習如何使用網絡套接字進行編程。 在常見的lisp usocket api中,它指定函數socket-sendsocket-receive采用simple-array (unsigned-byte 8)緩沖區。

我對lisp太新了解如何在sbcl common lisp中實現這一點。 看來我可以使用函數vectormake-array但不是simple-array ,也不知道如何將類型指定為unsigned-byte 8

有類似以下的合理和類型安全嗎?:

  (let ((buffer (make-array (list-length input))) (input-length (list-length input)) )
    (loop 
      for i upto input-length collect i do
      (setf (nth i buffer) (parse-integer (nth i input))))
    (usocket::socket-send socket buffer input-length)))

如果沒有,我如何完成制作我需要的緩沖區?

CL-USER 25 > (make-array 10
                         :element-type '(unsigned-byte 8)
                         :initial-element 0)
#(0 0 0 0 0 0 0 0 0 0)

CL-USER 26 > (describe *)

#(0 0 0 0 0 0 0 0 0 0) is a (SIMPLE-ARRAY (UNSIGNED-BYTE 8) (10))
0      0
1      0
2      0
3      0
4      0
5      0
6      0
7      0
8      0
9      0

制圖:

CL-USER 32 > (map '(simple-array (unsigned-byte 8) (*)) #'char-code "foobarbaz")
#(102 111 111 98 97 114 98 97 122)

或者更簡單

CL-USER 33 > (map '(vector (unsigned-byte 8)) #'char-code "foobarbaz")
#(102 111 111 98 97 114 98 97 122)

背部:

CL-USER 34 > (map 'string #'code-char #(102 111 111 98 97 114 98 97 122))
"foobarbaz"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM