Проблема при конвертации sprintf в C # - PullRequest
1 голос
/ 11 января 2011

У меня есть эта строка, мне нужно написать в C #

sprintf(
  currentTAG,
  "%2.2X%2.2X,%2.2X%2.2X",
  hBuffer[ presentPtr+1 ],
  hBuffer[ presentPtr ],
  hBuffer[ presentPtr+3 ],
  hBuffer[ presentPtr+2 ] );

hbuffer это массив uchar.

В C # у меня есть те же данные в байтовом массиве иМне нужно реализовать эту строку ...

Пожалуйста, помогите ...

Ответы [ 3 ]

2 голосов
/ 11 января 2011

Составное форматирование : на этой странице рассказывается, как использовать функцию string.Format().

2 голосов
/ 11 января 2011

Проверьте, работает ли это:

byte[] hBuffer = { ... };
int presentPtr = 0;
string currentTAG = string.Format("{0:X2}{1:X2},{2:X2}{3:X2}",
                          hBuffer[p+1],
                          hBuffer[p],
                          hBuffer[p + 3],
                          hBuffer[p + 2]);

Это еще один вариант, но менее эффективный:

byte[] hBuffer = { ... };
int presentPtr = 0;
string currentTAG = string.Format("{0}{1},{2}{3}",
                          hBuffer[p+1].ToString("X2"),
                          hBuffer[p].ToString("X2"),
                          hBuffer[p + 3].ToString("X2"),
                          hBuffer[p + 2].ToString("X2"));

Преобразование каждого байта hBuffer в строку, как во второмпример, менее эффективен.Первый пример даст вам лучшую производительность, особенно если вы делаете это много раз, благодаря тому, что не рассылаете спам сборщику мусора.

[От макушки головы] ВC / C ++ %2.2X выводит значение в шестнадцатеричном формате, используя буквы в верхнем регистре и не менее двух букв (с добавлением нуля слева).

В C ++ следующий пример выводит 01 61 в консоли:

unsigned char test[] = { 0x01, 'a' };
printf("%2.2X %2.2X", test[0], test[1]);

Используя приведенную выше информацию, следующий фрагмент C # выводит также 01 61 в консоли:

byte[] test = { 0x01, (byte) 'a' };
Console.WriteLine(String.Format("{0:X2} {1:X2}", test[0], test[1]));
0 голосов
/ 11 января 2011

Вы ищете метод String.Format .

...