小编Cor*_*tup的帖子

将字符串宏/常量转换为宽字符/ Unicode

我有一个Unicode Win32应用程序,它使用第三方库,其中一些提供其版本信息的常量作为#defined(窄)字符串.例如,libpng具有以下内容:

#define PNG_LIBPNG_VER_STRING "1.5.4"
#define PNG_HEADER_VERSION_STRING \
 " libpng version 1.5.4 - July 7, 2011\n"
Run Code Online (Sandbox Code Playgroud)

我将各种静态链接的库版本信息附加到我的About Box以便于版本跟踪,看起来将这个常量转换为宽字符串似乎很简单.

我的第一次尝试是TEXT(PNG_HEADER_VERSION_STRING),但是失败了

#define __TEXT(quote) L##quote
Run Code Online (Sandbox Code Playgroud)

..和LPNGHEADER_VERSION_STRING当然不存在.

所以我尝试了几种双包装宏的组合,以及各种##技巧尝试将L前缀添加到一个宏的常量,但是没能.我错过了一些简单的事吗?你会怎么处理:

#define VERSIONSTR "Test V1.2.3"
const char* ver= VERSIONSTR;
const wchar* wver = _T(VERSIONSTR); // fails, should be L"Test V1.2.3"
#define VERSIONSTRW _T(VERSIONSTR);  // fails also
Run Code Online (Sandbox Code Playgroud)

以编程方式,不需要简单地添加重复的L"Test V1.2.3"并且必须使其与第三方库保持同步.

我知道如果我正在构建Unicode,我可以在运行时转换它,但我认为有一种快速方法可以重新定义这个常量.

--- UPDATE ---

我通过我的包含结构做了一些非常愚蠢的事情,从而错过了阴谋.修复允许双重定义包装器按预期运行.对我来说很愚蠢.

c++ unicode wchar c-preprocessor

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

在awk中计算CRC

有没有人cksum在awk/gawk中实现POSIX 1003.2 compiliant CRC算法(作为输出)?我需要对内存中的字符串(而不是整个文件)执行校验和,并且调用shell来进行调用cksum是非常慢且昂贵的.

我的总体需求是生成一个10位数或更少的数字校验和.其他哈希/ CRC功能也可以工作,任何人有什么方便吗?

谷歌搜索和awk.info的扫描结果没什么有趣的.


编辑:
我最终使用外部cksum命令,但将结果缓存到awk关联数组.性能足够好,我不需要重新发明轮子.

algorithm awk checksum crc

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

标签 统计

algorithm ×1

awk ×1

c++ ×1

c-preprocessor ×1

checksum ×1

crc ×1

unicode ×1

wchar ×1