小编Ano*_*rog的帖子

Delphi和FPC是否具有MakeWord功能(两个字节或字符)?

这些功能很有用:

function MakeWord(low, high: char): word;
begin
  result := byte(high) shl 8 + byte(low);
end; 

function MakeWord(low, high: byte): word;
begin
  result := high shl 8 + low;
end; 
Run Code Online (Sandbox Code Playgroud)

但是我想知道这些类型的函数(可以以不同方式实现)是否已经存在于某个地方(不是在windows api特定文件中,而是在跨平台RTL函数中).

示例用例:取两个字符GT并从中生成WORD结果.

MakeWord('G','T');
Run Code Online (Sandbox Code Playgroud)

我发现这比在代码中插入SHL/SHR和/或十六进制操作以及其他黑客更容易读取,而这些操作并没有描述代码正在做什么......所以这些函数肯定存在于某个地方?或者人们在他们的应用程序中自行推出?

或类似的东西:

var x: word;
begin
  lo(x) := byte('G');
  hi(x) := byte('T');
end;
Run Code Online (Sandbox Code Playgroud)

但是,这不会起作用,因为左侧不能分配给:但它比其他一些解决方案IMO更具可读性.

我想我也看过LoWord和HiWord函数(或者LoByte,HiByte),但通常只读它们.怎么样写喜欢?

delphi bit-manipulation freepascal bit-shift cpu-word

3
推荐指数
1
解决办法
298
查看次数

如果在x秒内未按任何键,如何在Go中读取键,然后继续应用程序?

这是从控制台读取密钥的简单方法

reader := bufio.NewReader(os.Stdin)

// ...

func readKey() rune {
    char, _, err := reader.ReadRune()
    if err != nil {
        fmt.Println("Error reading key: ", err)
    }
    return char
}

// ...

fmt.Println("Checking keyboard input...")    

loop:
for {
    keyb := readKey()
    switch keyb {
    case 'x':
      fmt.Println("x key pressed, exiting loop")
      break loop
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,问题在于应用程序始终等待读取密钥。如果您只想等待5秒钟才能读取密钥,而又没有读取密钥,则继续应用程序怎么办?

我在想,我可能必须引入一个依赖项,例如ncurses或turbopascal所具有的称为crt并具有readkey函数的单元(模块)。但是,依赖确实是必需的吗?或者是否有简单的方法可以做到?我什至不知道甚至有一些defer()技巧。

ncurses go

0
推荐指数
1
解决办法
498
查看次数