这些功能很有用:
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),但通常只读它们.怎么样写喜欢?
这是从控制台读取密钥的简单方法
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()技巧。