我在java中知道你可以通过使用long.reverse(100000001010101)简单地反转long(101010100000001)。但是,c#中是否存在类似这样的内容。
答案 0 :(得分:2)
你的问题的答案是否定的。但是,它可以通过代码实现。 怎么样......
public static long RevLong(long l)
{
long tmp = l;
long r = 0L;
if (tmp < 0)
tmp *= -1;
while (tmp > 0)
{
r = (r * 10) + (tmp - ((tmp / 10)) * 10);
tmp = tmp / 10;
}
return r * (l < 0 ? -1 : 1);
}
答案 1 :(得分:1)
怎么样......
public ulong Bit(ulong x, int n)
{
return (x & (1 << n)) >> n;
}
public ulong ReverseBits(ulong x)
{
ulong result = 0;
for (int i = 0; i < 64; i++)
result = result | (x.Bit(64 - i) << i);
return result;
}
答案 2 :(得分:0)
有一些有趣的例子here。您可以将其中一个调整为扩展方法,如下所示:
public static class LongExtension
{
public static ulong Reverse(this ulong value)
{
return (value & 0x00000000000000FFUL) << 56 | (value & 0x000000000000FF00UL) << 40 |
(value & 0x0000000000FF0000UL) << 24 | (value & 0x00000000FF000000UL) << 8 |
(value & 0x000000FF00000000UL) >> 8 | (value & 0x0000FF0000000000UL) >> 24 |
(value & 0x00FF000000000000UL) >> 40 | (value & 0xFF00000000000000UL) >> 56;
}
}
然后你可以这样称呼它:
ulong myLong = 3L;
ulong reversed = myLong.Reverse();
答案 3 :(得分:0)
有点晚了,但我是这样解决的:
public static long Reverse(long i) =>
BitConverter.ToInt64(BitWiseReverseByteArray(BitConverter.GetBytes(i)).ToArray());
private static IEnumerable<byte> BitWiseReverseByteArray(IEnumerable<byte> array) =>
array.Select(b => BitWiseReverseByte(b)).Reverse();
private static byte BitWiseReverseByte(byte b)
{
b = (byte) ((b & 0x55) << 1 | (b >> 1) & 0x55);
b = (byte) ((b & 0x33) << 2 | (b >> 2) & 0x33);
b = (byte) ((b & 0x0F) << 4 | (b >> 4) & 0x0F);
return b;
}
答案 4 :(得分:-2)
希望这会奏效
string s = 101010100000001.tostring();
char[] charArray = s.ToCharArray();
Array.Reverse( charArray );
return new string( charArray );
&#13;