[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:03085] Re: 文字列を 1byte ごとに処理



服部さん、こんにちは。

        Thu, 29 Jul 1999 23:30:52 +0900 の
        [xyzzy:03084] 文字列を 1byte ごとに処理
        への返事です.

| 文字列を1byteごとに処理するのはどうしたらいいのでしょう?

うーん、あまりいい方法はありませんね(^^;

(defun url-hexify-string (str)
  (with-output-to-string (s)
    (let ((f #'(lambda (char)
		 (if (or (char> char #\z)
			 (char< char #\-)
			 (char< #\Z char #\a)
			 (char< #\: char #\@))
		     (format s "~:@(%~2,'0x~)" (char-code char))
		   (write-char char s)))))
      (dotimes (i (length str))
	(let* ((char (svref str i))
	       (code (char-code char)))
	  (if (>= code 256)
	      (progn
		(funcall f (code-char (ash code -8)))
		(funcall f (code-char (logand code 255))))
	    (funcall f char)))))))

(defun url-hexify-string (str)
  (with-output-to-string (s)
    (setq str (si:make-string-chunk str))
    (dotimes (i (- (si:chunk-size str) 1))
      (let ((char (code-char (si:unpack-uint8 str i))))
	(if (or (char> char #\z)
		(char< char #\-)
		(char< #\Z char #\a)
		(char< #\: char #\@))
	    (format s "~:@(%~2,'0x~)" (char-code char))
	  (write-char char s))))))

--
亀井哲弥(Tetsuya Kamei)
kamei@xxxxxxxxxxxx/JCA00343@xxxxxxxxxxx

Index Home