2015-05-21 4 views
-2

У меня есть String, у которого есть 2-мерный массив, мне нужно преобразовать эти 2D-строки в целые массивы. примеру:Как преобразовать коробчатую двумерную строку в 2-мерный целочисленный массив и наоборот в C#

String temp ="[[0xFF008041, 0x24008086, 0x00000000, 0x00000000,0x0008383A]]". 

мне нужно значение 2D строкового 2d массива целых чисел и ViceVersa

+0

Ну в этом случае вы только получили один "внутренний" массив - это будет всегда так, или может иногда быть '[[1, 2, 3], [4, 5, 6 ]] '? Похоже, в основном вам нужно выполнять строковые манипуляции. Сначала я разбил внешний массив на строки, которые являются внутренними массивами, затем анализируйте каждый из них отдельно. –

+0

Этот json вы пытаетесь разобрать? Что вы пробовали? – Sayse

+1

Похож на JSON для меня ... Возможно, использование анализатора JSON и создание 2d-массива будут работать, но трудно понять, с чем именно вы столкнулись. –

ответ

1

Попробуйте

 static void Main(string[] args) 
     { 
      String temp = "[[0xFF008041, 0x24008086, 0x00000000, 0x00000000,0x0008383A]]"; 
      temp = temp.Replace("[", ""); 
      temp = temp.Replace("]", ""); 
      string[] tempArray = temp.Split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries); 
      uint[] tempIntArray = tempArray.Select(x => FromHex(x)).ToArray(); 
     } 
     static uint FromHex(string value) 
     { 
      uint results; 
      uint.TryParse(value.Substring(2), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out results); 
      return results; 
     }​ 
+0

Невозможно использовать Linq в .net 2.0 ... читайте также теги вопроса. –

1

Ну, так как это .Net 2.0 вы не можете использовать преимущество более современного такие версии, как Linq, я бы предложил использовать Split, for петли, Trim и Convert:

Примечание № 1: Я работаю в предположении, что числа в строке всегда будут шестыми числами.

Замечание № 2: Я возвращаю массив с зазубринами, а не многомерный массив, так как вы не можете обеспечить, чтобы все внутренние массивы в строке имели одинаковое количество элементов.

String temp = "[[0xFF008041, 0x24008086, 0x00000000, 0x00000000,0x0008383A], [0x0008, 0x0034B]]"; 

int[][] ConvertStringToJaggedArray(String input) 
{ 
    String[] Separator = { "],[", "], [", "] ,[" }; 
    String[] OuterArray = input.Split(Separator, StringSplitOptions.RemoveEmptyEntries); 
    int[][] TargetArray = new int[OuterArray.Length][]; 
    string HexString; 
    for (int i = 0; i < OuterArray.Length; i++) 
    { 
     String[] InnerArray = OuterArray[i].Split(','); 
     TargetArray[i] = new int[InnerArray.Length]; 
     for (int j = 0; j < InnerArray.Length; j++) 
     { 
      HexString = InnerArray[j].Trim(" []".ToCharArray()); 
      TargetArray[i][j] = Convert.ToInt32(HexString, 16); 
     } 
    } 
    return TargetArray; 
} 
+0

Не отвечает ли ваш вопрос на ваш вопрос? –