Member 12440766 Ответов: 2

Преобразование между строкой и байтом


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

например
первая функция:
входные данные: строковое значение= "78a52f693d57e8cb";
выходной байт[] R={0x7;0x8;0xa;0x5;0x2;0xf;0x6;0x9;0x3;0xd;0x5;0x7;0xe;0x8;0xc;0xb};


вторая функция:
входной байт[] R={0x7;0x8;0xa;0x5;0x2;0xf;0x6;0x9;0x3;0xd;0x5;0x7;0xe;0x8;0xc;0xb};
вывод: строковое значение= "78a52f693d57e8cb";

думает за всех

Что я уже пробовал:

для первой функции
string Stemp = "0123456789ABCDEF";
           byte[] Btemp = { 0x0, 0x1 , 0x2 , 0x3 , 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF};
           byte[] R = new byte[value.Length];
           foreach (char c in value)
           { R[z] = Btemp[Stemp.IndexOf(c)]; z = z + 1; }


для второй функции

char[] ty = new char[16];
 for (int i = 0; i < 16; i++)
                ty[i] = Stemp[Btemp.IndexOf(R[i])];

2 Ответов

Рейтинг:
2

OriginalGriff

Это очень необычное требование, но оно довольно тривиально:

string value = "78a52f693d57e8cb";
byte[] R = new byte[value.Length];
int z = 0;
foreach (char c in value)
    {
    if (c >= '0' && c <= '9') R[z++] = (byte)(c - '0');
    else if (c >= 'A' && c <= 'F') R[z++] = (byte)(c - 'A' + 10);
    else if (c >= 'a' && c <= 'f') R[z++] = (byte)(c - 'a' + 10);
    else throw new ArgumentException("Bad hex digit: " + c);
    }
char[] ty = new char[R.Length];
for (int i = 0; i < R.Length; i++)
    {
    byte b = R[i];
    if (b >= 0 && b <= 9) ty[i] = (char)(b + '0');
    else if (b >= 10 && b <= 15) ty[i] = (char)(b - 10 + 'A');
    else throw new ArgumentException("Bad hex digit: " + b);
    }
string output = new string(ty);


Member 12440766

Спасибо .... очень очень Спасибо

OriginalGriff

Всегда пожалуйста!

Рейтинг:
1

Mohibur Rashid

Строковое представление и числовое значение не совпадают.

В вашем байте вы использовали числовое значение.

Взгляните на диаграмму ASCII, ASCII char скажет вам, что 0 начинается с 48(0x30), a-97(0x61), A-65(0x41)

Чтобы получить нулевое значение ASCII из 0, вам нужно добавить 48(0x30) с 0
Чтобы получить 0 от нуля, вам нужно вычесть 48(0x30);

// example
char [] c = { (char)48, (char)49, (char)50 };
            String s = new string(c);
            Console.WriteLine("First String : "+s);