字符串参数怎么可以同时是byte *类型和wchar_t *类型?

问题描述 投票:0回答:1

我目前正在研究 WinHttp API,并遇到了

WinHttpConnect()
函数,该函数在 here 中进行了描述。参数描述让我很担心。前面提到的页面首先给出了函数原型为

WINHTTPAPI HINTERNET WinHttpConnect(
  [in] HINTERNET     hSession,
  [in] LPCWSTR       pswzServerName,
  [in] INTERNET_PORT nServerPort,
  [in] DWORD         dwReserved
);

并继续参数说明。第二个输入参数解释如下(省略最后两句不相关的句子):

[输入] pswz服务器名称
指向包含 HTTP 服务器主机名的以 null 结尾的字符串的指针。或者,该字符串可以包含 ASCII 格式的站点 IP 地址,例如 10.0.1.45。 [...]

这就是我正在努力解决的问题。在 C 中,字符串由宽字符(如参数类型

LPCWSTR
所暗示的那样)或字节(如“IP 地址 [...] in ASCII”所暗示的那样)组成。我不清楚该函数如何区分参数指向的内存位置的字节是构成窄字符串的字节还是构成宽字符串的宽字符。

有人可以解释一下吗?

c winapi char wchar-t
1个回答
0
投票

ASCII 可以指代两件事。

它可以指编码,在这种情况下,它确实意味着

char *
,正如你所说。

但它也可以指字符集,即可以使用 ASCII 编码的 Unicode 代码点。

第二个更接近这里的意思。 “ASCII 格式的站点 IP 地址”是指“站点 IP 地址的文本表示形式”。换句话说,您应该提供

L"10.0.1.45"
而不是打包表格
"\x0A\x00\x01\x2D"

© www.soinside.com 2019 - 2024. All rights reserved.