我是生锈新手。我试图按照此处实现 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)
我究竟做错了什么?有一个更好的方法吗?
我正在制作一个简单的客户端服务器管道示例作为练习。服务器将使用命名管道从客户端接收字符串。服务器将从客户端接收到的字符串中每个字符的大小写反转,并使用管道将字符串发送回客户端。它有效,但我写入管道的字符串似乎被空格打破了。随附的图片显示了我的问题。
我在服务器上创建一个像这样的命名管道。
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) 简短说明(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或全部为汇编?