如何使用 C++ 中的 curses 安全地将 ascii 整数转换回其关联的 ascii 字符?
how can i safely convert an ascii integer back to its associated ascii character using curses in c++?
我一直无法为我的问题找到可靠的解决方案,我只是想尝试创建一些功能:
在终端中占据行和列位置。
调用 mvinch(window_object , rows, cols),其中 return 是一个无符号整数,对应于该位置的终端。
returns 与该 unsigned int 关联的 ascii 字符,有效地将其转换回 char。
这是我在 c++11 中的代码示例:
char Kmenu::getChrfromW(size_t const y, size_t const x,
bool const save_cursor) const {
size_t curr_y, curr_x;
getyx(_win, curr_y, curr_x);
char ich = mvwinch(_win, y, x);
char ch = ich;
if (save_cursor)
wmove(_win, curr_y, curr_x);
return ch;
}
如果例如终端中位置 2,3 的字符是字母 'a',我希望此函数 return 字母 'a'.
我尝试了此处描述的解决方案:
Convert ASCII number to ASCII Character in C
有效地将整数转换为 char。
不幸的是,我得到的仍然是整数:用充满“w”的屏幕进行测试,我得到了整数 119。
curses 函数 mvwinch() 的手册页将函数描述为 return chtype,编译器将其识别为无符号整数。
是否有内置的 curses 函数可以直接返回 char 而无需转换为 unsigned int,或者我可以通过其他方式实现此目的?
编辑:ch 到 ich,与实际代码相同
一个 chtype
包含一个字符和其他数据。 curses.h
header 有几个符号可用于提取这些位。如果你用 A_CHARTEXT
屏蔽它并将其转换为 char
,你将得到一个字符:
char c = (char)((A_CHARTEXT) & n);
您的示例不应编译,因为它声明了两次 ch
。你可能是这个意思:
char Kmenu::getChrfromW(size_t const y, size_t const x,
bool const save_cursor) const {
int curr_y, curr_x; // size_t is inappropriate...
getyx(_win, curr_y, curr_x);
char ch = (char)((A_CHARTEXT) & mvwinch(_win, y, x));
// char ch = ich;
if (save_cursor)
wmove(_win, curr_y, curr_x);
return ch;
}
mvwinch
mentions the A_CHARTEXT
mask in the Attributes 部分的手册页,假设 reader 熟悉以下内容:
The following bit-masks may be AND-ed with characters returned by
winch.
A_CHARTEXT Bit-mask to extract character
A_ATTRIBUTES Bit-mask to extract attributes
A_COLOR Bit-mask to extract color-pair field information
我一直无法为我的问题找到可靠的解决方案,我只是想尝试创建一些功能:
在终端中占据行和列位置。
调用 mvinch(window_object , rows, cols),其中 return 是一个无符号整数,对应于该位置的终端。
returns 与该 unsigned int 关联的 ascii 字符,有效地将其转换回 char。
这是我在 c++11 中的代码示例:
char Kmenu::getChrfromW(size_t const y, size_t const x,
bool const save_cursor) const {
size_t curr_y, curr_x;
getyx(_win, curr_y, curr_x);
char ich = mvwinch(_win, y, x);
char ch = ich;
if (save_cursor)
wmove(_win, curr_y, curr_x);
return ch;
}
如果例如终端中位置 2,3 的字符是字母 'a',我希望此函数 return 字母 'a'.
我尝试了此处描述的解决方案:
Convert ASCII number to ASCII Character in C
有效地将整数转换为 char。
不幸的是,我得到的仍然是整数:用充满“w”的屏幕进行测试,我得到了整数 119。
curses 函数 mvwinch() 的手册页将函数描述为 return chtype,编译器将其识别为无符号整数。
是否有内置的 curses 函数可以直接返回 char 而无需转换为 unsigned int,或者我可以通过其他方式实现此目的?
编辑:ch 到 ich,与实际代码相同
一个 chtype
包含一个字符和其他数据。 curses.h
header 有几个符号可用于提取这些位。如果你用 A_CHARTEXT
屏蔽它并将其转换为 char
,你将得到一个字符:
char c = (char)((A_CHARTEXT) & n);
您的示例不应编译,因为它声明了两次 ch
。你可能是这个意思:
char Kmenu::getChrfromW(size_t const y, size_t const x,
bool const save_cursor) const {
int curr_y, curr_x; // size_t is inappropriate...
getyx(_win, curr_y, curr_x);
char ch = (char)((A_CHARTEXT) & mvwinch(_win, y, x));
// char ch = ich;
if (save_cursor)
wmove(_win, curr_y, curr_x);
return ch;
}
mvwinch
mentions the A_CHARTEXT
mask in the Attributes 部分的手册页,假设 reader 熟悉以下内容:
The following bit-masks may be AND-ed with characters returned by
winch.
A_CHARTEXT Bit-mask to extract character
A_ATTRIBUTES Bit-mask to extract attributes
A_COLOR Bit-mask to extract color-pair field information