代码之家  ›  专栏  ›  技术社区  ›  Naveen

查洛威尔和GCC

  •  0
  • Naveen  · 技术社区  · 15 年前

    我正在尝试将以下代码从msvc转换为gcc

        #define ltolower(ch) CharLower((LPSTR)(UCHAR)(ch))
        char * aStr;
        * aStr = (char)ltolower(*aStr); 

    此代码给出了一个编译器错误:从char*到char的强制转换会丢失精度

    我的理解是C的tolower(int)不会转换整个字符串。 谢谢。

    1 回复  |  直到 15 年前
        1
  •  0
  •   Pablo Santa Cruz    15 年前

    你的演员阵容 查拉尔 正在引发该错误。在执行此操作之前,需要设置传递到的指针的高位字节 查拉尔 等于零。

    从函数的msdn引用:

    如果操作数是字符串, 函数返回指向 已转换字符串。因为字符串 转换到位,返回 值等于lpsz。

    如果操作数是单个字符, 返回值是32位值 其高位字为零,且 低阶字包含转换后的 性格。

    类似的事情可能会奏效:

    #define ltolower(ch) CharLower(0x00ff & ch)
    

    如果使用C++编译器,可能还需要一个强制转换操作符:

    #define ltolower(ch) CharLower((LPTSTR)(0x00ff & ch))
    

    但是还没有测试过…