从C/C+;移植时如何处理负数或无符号字符+;到JavaScript? 我试图把一个旧的C++ Listor()移植到JavaScript中,并且在我对C/C++的不理解方面挣扎了一点。

从C/C+;移植时如何处理负数或无符号字符+;到JavaScript? 我试图把一个旧的C++ Listor()移植到JavaScript中,并且在我对C/C++的不理解方面挣扎了一点。,javascript,c++,c,casting,fromcharcode,Javascript,C++,C,Casting,Fromcharcode,我有一个参数c,我现在看到它可以是我正在解析的输入文件块上的位置索引(*yy_cp),也可以是存储在这个地址的实际字符(包括nul)。我需要使用c作为查找表中的索引。lexer执行以下操作: /* Promotes a possibly negative, possibly signed char to an * unsigned integer for use as an array index. If the signed char * is negative, we want to

我有一个参数
c
,我现在看到它可以是我正在解析的输入文件块上的位置索引(
*yy_cp
),也可以是存储在这个地址的实际字符(包括nul)。我需要使用
c
作为查找表中的索引。lexer执行以下操作:

/* Promotes a possibly negative, possibly signed char to an
 * unsigned integer for use as an array index.  If the signed char
 * is negative, we want to instead treat it as an 8-bit unsigned
 * char, hence the double cast.
 */
#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
并这样称呼它:

register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
它将在
yy_c
中存储包含256个条目(我假设扩展ASCII)的查找表
yy_ec
的值。查找位置由
YY_SC_to_UI
生成,这就是我无法将其移植到JavaScript的地方
YY_SC_TO_UI
必须返回一个介于0-255之间的数字,所以我只需获取我所拥有的,然后:

 "[c]".charCodeAt(0)
或者,在处理JS中的“可能的负数,可能的有符号字符”时,我还需要注意什么


谢谢。

根据编译器的不同,
char
可以
有符号
无符号
。大概作者希望这两种方法都能起作用,并确保在从
char
转换到
unsigned int
时,值始终是零扩展的,而不是符号扩展的。确保值为0..255而不是-128..127的安全方法

方法返回一个介于0和65535之间的整数

这取决于您的输入,您希望如何处理超出范围的可能值,但一种替代方法可以是简单的位屏蔽:

"€".charCodeAt(0) & 0xff;

电子战。你确定要使用此代码吗?是的,至少不是所有的注释都是日语…:)一旦或者如果我曾经让它工作过,我梦想着用JS.sexy进行一次干净的重写。。。为了完整起见,可以添加