16進数を2進数やunsignedの10進数に変換するにはどうしたらよいでしょうか?

(let ((str-num "0xffffffff"))
(if (string-match "^0x\\(.+\\)" str-num)
(message "%s is %d." str-num
(read (concat "#x" (match-string 1 str-num))))))
"0xffffffff is -1."