Проверьте, работает ли это:
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]));