我目前正在研究 WinHttp API,并遇到了此处WinHttpConnect()
描述的函数。参数描述让我很担心。上述页面首先给出了函数原型
WINHTTPAPI HINTERNET WinHttpConnect(
[in] HINTERNET hSession,
[in] LPCWSTR pswzServerName,
[in] INTERNET_PORT nServerPort,
[in] DWORD dwReserved
);
继续参数说明。第二个输入参数解释如下(省略最后两句不相关的句子):
[in] pswzServerName
指向包含 HTTP 服务器主机名的以空字符结尾的字符串的指针。或者,该字符串可以包含站点的 ASCII IP 地址,例如 10.0.1.45。[...]
这就是我苦苦挣扎的部分。在 C 语言中,字符串要么由宽字符组成(如参数类型LPCWSTR
所暗示的那样),要么由字节组成(如措辞“IP 地址 [...] ASCII 格式”所暗示的那样)。我不清楚函数如何区分参数指向的内存位置上的字节是组成窄字符串的字节还是组成宽字符串的宽字符。
有人可以解释一下吗?
ASCII 可以指两件事。
它可以引用 ASCII 编码,在这种情况下它确实暗示字节,因此
char *
。但它也可以指ASCII字符集,即可以用ASCII进行编码的符号。
第二种更接近此处的意思。“以 ASCII 表示的站点 IP 地址”是指“以文本形式表示的站点 IP 地址”。换句话说,您需要提供地址的文本形式(例如
L"10.0.1.45"
),而不是其压缩形式("\x0A\x00\x01\x2D"
)或其数字形式(0x0A00012D
)。