关于C#:LPTSTR的测试值

Test value of LPTSTR

我有两个要比较的字符串。我正在关注此页面的命名管道服务器/客户端示例:http://msdn.microsoft.com/zh-cn/library/windows/desktop/aa365592(v = vs.85).aspx

无论如何,在我的" GetAnswerToRequest"中,我定义了这样的字符串

LPTSTR选项= TEXT("这是测试");

,然后尝试将其与客户端发送的pchRequest参数进行比较,该参数是相同的字符串。我找不到能解决问题的有效比较。

当我将两个值都放在调试器中时,我看到了一些区别。作为选择,我相信它使用的是单字节字符:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-       option,15  
        [0x00000000]    0x0054  unsigned short
        [0x00000001]    0x0048  unsigned short
        [0x00000002]    0x0049  unsigned short
        [0x00000003]    0x0053  unsigned short
        [0x00000004]    0x0020  unsigned short
        [0x00000005]    0x0049  unsigned short
        [0x00000006]    0x0053  unsigned short
        [0x00000007]    0x0020  unsigned short
        [0x00000008]    0x0041  unsigned short
        [0x00000009]    0x0020  unsigned short
        [0x0000000a]    0x0054  unsigned short
        [0x0000000b]    0x0045  unsigned short
        [0x0000000c]    0x0053  unsigned short
        [0x0000000d]    0x0054  unsigned short
        [0x0000000e]    0x0000  unsigned short

,对于pchRequest值,看起来像是使用双字节字符:

1
2
3
4
5
6
7
8
9
10
11
12
-       pchRequest,15  
        [0x00000000]    0x4854  unsigned short
        [0x00000001]    0x5349  unsigned short
        [0x00000002]    0x4920  unsigned short
        [0x00000003]    0x2053  unsigned short
        [0x00000004]    0x2041  unsigned short
        [0x00000005]    0x4554  unsigned short
        [0x00000006]    0x5453  unsigned short
        [0x00000007]    0x5a00  unsigned short
        [0x00000008]    0x48c0  unsigned short
        [0x00000009]    0x18cf  unsigned short
        [0x0000000a]    0x0000  unsigned short

因此..大多数十六进制值都匹配,但是pchRequest中每个字符有两个,而我的option变量中有一个。我认为这就是使lstrcmp()失败的原因。

此外,pchRequest似乎还可能包含一些额外的字符,但我无法确定它们来自何处。据我所知,关于如何比较这两个字符串的任何想法都应该是相同的?

谢谢!


您大概具有Unicode构建,这意味着LPTSTR正在定义一个宽字符串。但是,您需要与ANSI字符串进行比较。

为此,只需删除TEXT()宏,然后使用char*。例如,

1
char* option ="THIS IS A TEST";

然后使用lstrcmpA()显式调用ANSI版本的lstrcmp