小编DNS*_*zus的帖子

在 Rust 中实现 from_str 时,如何在 match 语句中返回错误?

我是生锈新手。我试图按照此处实现 from_str 特征的示例
https://doc.rust-lang.org/std/str/trait.FromStr.html

但我不断收到此错误,指向“return Err(Self::Err)”

variant or associated item not found in `black_jack_tools::PlayerDifficulty`
Run Code Online (Sandbox Code Playgroud)

我知道为什么 Self::Err 没有在我的枚举中定义,但我不明白为什么 rust 在这种情况下关心,因为我返回了 Err 对象的 Err,它与 Result<Self, Self::Err> 类型。

这是我的 FromStr,下面是带有 MRE 的 Rust 游乐场的链接

impl FromStr for PlayerDifficulty {
    type Err = ParseError;
    fn from_str(s:&str) -> Result<Self,Self::Err>{
        let result = match s {
            "Player" => Ok(PlayerDifficulty::Player),
            "Dealer" => Ok(PlayerDifficulty::Dealer),
            "Normal" => Ok(PlayerDifficulty::Normal),
            "Perfect"=> Ok(PlayerDifficulty::Perfect),
            "Micky" =>  Ok(PlayerDifficulty::Micky),
            "Elliot" => Ok(PlayerDifficulty::Elliot),
            "Cultist"=> Ok(PlayerDifficulty::Cultist),
            _ => return Err(Self::Err)
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?有一个更好的方法吗?

rust

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

为什么我的 NamedPipe 用空格分隔字符串?

我正在制作一个简单的客户端服务器管道示例作为练习。服务器将使用命名管道从客户端接收字符串。服务器将从客户端接收到的字符串中每个字符的大小写反转,并使用管道将字符串发送回客户端。它有效,但我写入管道的字符串似乎被空格打破了。随附的图片显示了我的问题。

我在服务器上创建一个像这样的命名管道。

HANDLE pipe_handle = CreateNamedPipe( PIPE_REV_NAME, //name PIPE_ACCESS_DUPLEX, //openMode PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE, //Pipe Mode 1,//Max Instances 1024,//OutBuffSize 1024,//InBuffSize NMPWAIT_USE_DEFAULT_WAIT, NULL);

并在服务器上对其进行读取和写入,如下所示:

    DWORD bytes_read;
    ReadFile(
        pipe_handle,
        (LPVOID)string_to_reverse,
        MAX_PIPE_REVLEN - 1,
        &bytes_read,
        NULL);  
    string_to_reverse[bytes_read] = '\0';
    printf("Recieved: %s\n", string_to_reverse);
    cap_reverse(string_to_reverse, bytes_read);
    printf("Sending: %s\n", string_to_reverse);

    DWORD bytes_written;

    WriteFile(
        pipe_handle,
        (LPVOID)string_to_reverse,
        bytes_read,
        &bytes_written,
        NULL);
Run Code Online (Sandbox Code Playgroud)

客户端创建一个文件来使用管道,如下所示:

HANDLE pipe_handle = CreateFile(
    PIPE_REV_NAME,
    GENERIC_READ | GENERIC_WRITE,
    0,              // no sharing 
    NULL,           // default security attributes
    OPEN_EXISTING,  // opens existing pipe 
    0,              // default attributes 
    NULL
); …
Run Code Online (Sandbox Code Playgroud)

c++ operating-system pipe

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

为什么不能将FS寄存器的PID块的值分配给无符号的int?

简短说明(32位版本)

为什么这会引发不正确的操作数错误?

unsigned int GetPID() {

    unsigned int id;
    __asm {
        mov id, fs:[0x20];
    }
    return id;
Run Code Online (Sandbox Code Playgroud)

但是不是吗?

unsigned int GetPID() {

    unsigned int id;
    __asm {
        mov ebx, fs:[0x20];
        mov id, ebx;
    }
    return id;
}
Run Code Online (Sandbox Code Playgroud)

我是在C中使用汇编语言的新手,我想对使用它时工作原理进行一些解释。

注意。我知道使用此功能获取当前进程ID是错误的。这只是一个实验,还可以学习操作系统。

附带问题:可以在汇编括号中编写函数的一半吗?然后用C完成功能?还是每个功能都应该全部为C或全部为汇编?

c x86 assembly

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

标签 统计

assembly ×1

c ×1

c++ ×1

operating-system ×1

pipe ×1

rust ×1

x86 ×1