Skip to content

Instantly share code, notes, and snippets.

@benaadams
Last active June 9, 2016 10:01
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save benaadams/0a3a69c5c186628e617e7c49b78f337d to your computer and use it in GitHub Desktop.
Save benaadams/0a3a69c5c186628e617e7c49b78f337d to your computer and use it in GitHub Desktop.
Fast unit ipaddress to string
public unsafe static string FastIntegerToIPAddress(uint input)
{
var input0 = (input & 0xff000000) >> 24;
var input1 = (input & 0xff0000) >> 16;
var input2 = (input & 0xff00) >> 8;
var input3 = (input & 0xff);
var length0 = input0 > 99 ? 3 : input0 > 9 ? 2 : 1;
var length1 = input1 > 99 ? 3 : input1 > 9 ? 2 : 1;
var length2 = input2 > 99 ? 3 : input2 > 9 ? 2 : 1;
var length3 = input3 > 99 ? 3 : input3 > 9 ? 2 : 1;
var value = new string('\0', length0 + length1 + length2 + length3 + 3);
fixed (char* ptr = value)
{
var start0 = ptr + length0;
var start1 = 1 + ptr + length1 + length0;
var start2 = 2 + ptr + length2 + length1 + length0;
var start3 = 2 + ptr + length3 + length2 + length1 + length0;
*start0 = '.';
*start1 = '.';
*start2 = '.';
if (length0 == 3)
{
var digit = input0 * 41 >> 12;
input0 -= digit * 100;
*(start0 - 3) = (char)('0' + digit);
}
if (length1 == 3)
{
var digit = input1 * 41 >> 12;
input1 -= digit * 100;
*(start1 - 3) = (char)('0' + digit);
}
if (length2 == 3)
{
var digit = input2 * 41 >> 12;
input2 -= digit * 100;
*(start2 - 3) = (char)('0' + digit);
}
if (length3 == 3)
{
var digit = input3 * 41 >> 12;
input3 -= digit * 100;
*(start3 - 2) = (char)('0' + digit);
}
if (length0 >= 2)
{
var digit = input0 * 205 >> 11;
input0 -= digit * 10;
*(start0 - 2) = (char)('0' + digit);
}
if (length1 >= 2)
{
var digit = input1 * 205 >> 11;
input1 -= digit * 10;
*(start1 - 2) = (char)('0' + digit);
}
if (length2 >= 2)
{
var digit = input2 * 205 >> 11;
input2 -= digit * 10;
*(start2 - 2) = (char)('0' + digit);
}
if (length3 >= 2)
{
var digit = input3 * 205 >> 11;
input3 -= digit * 10;
*(start3 - 1) = (char)('0' + digit);
}
*(start0 - 1) = (char)('0' + input0);
*(start1 - 1) = (char)('0' + input1);
*(start2 - 1) = (char)('0' + input2);
*start3 = (char)('0' + input3);
}
return value;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment