我想將IP字符串轉換爲長c++
, 我寧願不使用任何inet
的函數。IP到長轉換C++
我用下面的函數將其轉換:
unsigned long IPStringToLong(std::string IPAddr)
{
unsigned char aClassByte, bClassByte, cClassByte, dClassByte;
sscanf_s(IPAddr.c_str(), IP_TO_BYTES_FORMAT, &aClassByte, &bClassByte, &cClassByte, &dClassByte);
unsigned long IP = (aClassByte << 24) | (bClassByte << 16) | (cClassByte << 8) | dClassByte;
std::cout << IP << std::endl;
return IP;
}
IP_TO_BYTES_FORMAT
這裏定義:
#define IP_TO_BYTES_FORMAT "%hhu.%hhu.%hhu.%hhu"
印刷只是爲了調試。
Visual Studio引發運行時錯誤:Stack corruption around variable bClassByte
,但轉換確實有效。
當我定義的格式short
S(和改變路線的代碼):
#define IP_TO_BYTES_FORMAT "%hu.%hu.%hu.%hu"
它工作得很好,我不明白爲什麼。
'「%hh」'不是有效的格式。你的意思是「%胡」嗎? –
sscanf類函數不帶類型安全參數。 %u格式需要指向整數的指針,你給char(byte)指針,sscanf函數doest知道這一點。下一個變量被破壞(運行時的調試版本發出警告) –
@Someprogrammerdude是的,謝謝! –