0

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

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

4

3 回答 3

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;
}
于 2013-05-31T10:13:39.663 回答
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();
        }
    }
}
于 2013-05-31T10:50:33.973 回答
0

从您的示例来看,这不是endian 的工作方式。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);
}
于 2013-05-31T10:14:27.997 回答