如何将十进制字符重新排序为小端?

时间:2013-05-31 09:39:29

标签: c# endianness

如果我从C#中的textBox读取类似12345678901234的值,如何将其重新排序为34129078563412?

没有任何空格,文本框总是只有14个字符。

3 个答案:

答案 0 :(得分:0)

尝试以下方法:

string s = Reorder("12345678901234");//34129078563412
//...
static string Reorder(string s) {
    StringBuilder sb = new StringBuilder(s);
    for(int i = 0; i < sb.Length / 2; i += 2) {
        Reorder(sb, i, (sb.Length - 1) - i - 1);
        Reorder(sb, i + 1, (sb.Length - 1) - i);
    }
    return sb.ToString();
}
static void Reorder(StringBuilder sb, int pos1, int pos2) {
    char tmp = sb[pos1];
    sb[pos1] = sb[pos2];
    sb[pos2] = tmp;
}

答案 1 :(得分:0)

从您的示例来看,这不是endian works的方式。 Endian与二进制数字的字节顺序有关,与数字串无关。

如果你在谈论整数,那么你需要先将字符串转换为数字,然后转换为字节数组。

所以:

string text = "12345678901234";
long number = long.Parse(text);
byte[] numberBytes = BitConverter.GetBytes(number);
if (BitConverter.IsLittleEndian) Array.Reverse(numberBytes);

如果你真的想砍掉并改变数字,那就是基本的字符串操作,而不是字节序。

但是你可以这样做:

string oldString = "12345678901234";
string newString = string.Empty;
for (int i = oldString.Length - 2; i >= 0; i -= 2)
{
    newString += oldString.Substring(i, 2);
}

答案 2 :(得分:0)

好的,这将产生您想要的结果:

using System;

namespace Demo
{
    class Program
    {
        void Run()
        {
            string input = "12345678901234";
            string output = reorder(input);
            Console.WriteLine(output);
        }

        string reorder(string input)
        {
            var a = input.ToCharArray();

            for (int i = 0; i < a.Length/2; i += 2)
            {
                swap(ref a[i], ref a[a.Length-2-i]);
                swap(ref a[i+1], ref a[a.Length-1-i]);
            }

            return new string(a);
        }

        void swap(ref char a, ref char b)
        {
            char t = a;
            a = b;
            b = t;
        }

        static void Main()
        {
            new Program().Run();
        }
    }
}