IPv4アドレス文字列の区切り文字(.)を除去して0埋め12Byte文字列に変換する
2013-11-06
/*!
IPv4アドレス文字列の区切り文字(.)を除去して0埋め12Byte文字列に変換する。
例) ["192.168.0.1" → "192168000001"]
@param address :変換元のIPアドレス文字列。
@param str :変換結果。12Byte確保しておくこと。入力が不正な場合の値は保証しない。
@return なし。
*/
void iPv4ToDotDeleteAndZeroFill(const char *address, char *str) {
unsigned int octetCount = 0; // 今第何オクテット?
unsigned int temporaryData = 0; // そのオクテット内の値を一時保存
unsigned int intAddress[4] = {0}; // 各オクテット毎の整数値
// まずは各オクテット毎にint型の配列へ代入する。
for (int i = 0; i < (int)strlen(address); i++) {
// '.'でなければ桁上げして1の位に数値を加算。
if (address[i] != '.') {
temporaryData *= 10;
temporaryData += StrToInt(address[i]);
}
// '.'であれば
else {
intAddress[octetCount] = temporaryData;
temporaryData = 0;
octetCount++;
}
}
intAddress[octetCount] = temporaryData; // これが第4オクテット(なはず)
// 0埋めの文字列に変換する。無理矢理っ!
sprintf(str, "%03d%03d%03d%03d", intAddress[0], intAddress[1], intAddress[2], intAddress[3]);
}