如何从 STDIN 读取 1 个字节?

发布于 2025-01-11 10:36:26 字数 374 浏览 0 评论 0原文

如何从 STDIN 读取一个字节?

我尝试 在 Hoogle 上搜索 IO Word8 但有没什么用处。

我能找到的最接近的是 System.IO .getChar,但它读取的是 Char 而不是 Word8

How do I read one byte from STDIN?

I tried searching for IO Word8 on Hoogle but there is nothing useful.

The closest I can find is System.IO.getChar, but it reads a Char not a Word8.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

后知后觉 2025-01-18 10:36:26

我认为最简单的选择是使用 Data.ByteString 中的 hGet 如下所示:

import qualified Data.ByteString as B
import System.IO (stdin)
import Data.Word (Word8)

getByte :: IO Word8
getByte = B.head <
gt; B.hGet stdin 1

您也可以使用 hSetBinaryMode

import System.IO
import Data.Word (Word8)

getByte :: IO Word8
getByte = do
  hSetBinaryMode stdin True
  c <- getChar
  hSetBinaryMode stdin False
  pure $! fromIntegral (fromEnum c)

I think the easiest option is to use hGet from Data.ByteString like this:

import qualified Data.ByteString as B
import System.IO (stdin)
import Data.Word (Word8)

getByte :: IO Word8
getByte = B.head <
gt; B.hGet stdin 1

You can alternatively use hSetBinaryMode like this:

import System.IO
import Data.Word (Word8)

getByte :: IO Word8
getByte = do
  hSetBinaryMode stdin True
  c <- getChar
  hSetBinaryMode stdin False
  pure $! fromIntegral (fromEnum c)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文