lisp解码?

lisp解码?,lisp,Lisp,如何在lisp中解码二进制流 我使用open-file并以元素类型(无符号字节8)的形式传递参数,但以数字而不是字符串的形式返回 请帮我解决这个问题这个问题有点不清楚。我认为您的问题在于,您创建了一个文件,其中写入了一个(或多个)类型为(无符号字节8)的元素,但当您尝试读取它时,您得到的是字符,而不是二进制值 如果是这种情况,则需要使用:element type'(无符号字节8)打开文件 如果我误解了你的意思,请编辑你的问题,我将尝试回答你的问题。我认为你的问题不是问题。以二进制模式以无符号字节

如何在lisp中解码二进制流 我使用open-file并以元素类型(无符号字节8)的形式传递参数,但以数字而不是字符串的形式返回
请帮我解决这个问题

这个问题有点不清楚。我认为您的问题在于,您创建了一个文件,其中写入了一个(或多个)类型为
(无符号字节8)
的元素,但当您尝试读取它时,您得到的是字符,而不是二进制值

如果是这种情况,则需要使用
:element type'(无符号字节8)
打开文件


如果我误解了你的意思,请编辑你的问题,我将尝试回答你的问题。

我认为你的问题不是问题。以二进制模式以无符号字节8打开文件时,指定读取文件,时间为8位,表示为0到255之间的数字。根据您读取它的方式,您可能会将其作为数组或列表获取

“文本”文件是一组使用ASCII字符表示的数字。对于更复杂的文本,使用Unicode表示,但这比文本更接近传统的二进制格式

如果您试图读取PDF文件,则必须按照文件格式从中获取有意义的数据。Wotsit的网站有一个文件格式库


从你的问题来看,听起来好像你只是在学习编程。我不建议你在刚开始学习的时候使用PDF

简单的回答是,如果要以字符串形式读取,则不需要指定
:元素类型


类型
”(无符号字节8)
指的是一个数字,而不是C中的字符。在Lisp中,字符是一个实际的数据类型,您需要使用此元素类型打开文件才能获取字符串。要认识到的重要一点是,
:元素类型
决定了文件中的哪些数据类型元素将被解析成什么样的数据类型,并返回为什么样的数据类型。如果阅读,您会看到元素类型必须是字符、整数的子类型,或者是无符号字节或有符号字节。但是,默认值是字符,它以lisp使用的任何格式生成字符串。

二进制是字节。您需要打开一个文本端口。
;;; Flexi-Streams "bivalent streams" solve the binary vs. character stream problem.
;;; You'll want to install QuickLisp and understand the REPL * and ** variables:

(require 'flexi-streams) ;; or (ql:quickload 'flexi-streams)

(with-open-file (out "foo.text" :direction :output)
  (write-line "Foo" out))   ; "Foo"

(with-open-file (in "foo.text")
  (read-line in))           ; "Foo", NIL

(with-open-file (in "foo.text" :element-type '(unsigned-byte 8))
  (read-line in)) ;; read-line wrong stream type error

(with-open-file (in "foo.text" :element-type '(unsigned-byte 8))
  (let ((s (make-array 3)))
    (read-sequence s in) s))        ; #(70 111 111)

(map 'list #'code-char *)           ; (#\F #\o #\o)

(map 'string #'code-char **)        ; "Foo"

(with-open-file (raw "foo.text" :element-type 'flexi-streams:octet)
  (with-open-stream (in (flexi-streams:make-flexi-stream raw))
    (read-line in)))                ; "Foo", NIL

;; Thanks to Edi Weitz for providing this essential tool.