Передача строки base64 с использованием строковой переменной c #. Ошибка: индекс находился за пределами массива

#c# #arrays #pdf #itextsharp

#c# #строка #base64

Вопрос:

Все еще новичок. Я хотел бы заменить длинную строку Base64 переменной, но продолжаю получать ошибку: индекс находился за пределами массива.

Сценарий: я извлекаю полную строку base64 из базы данных SQL, например, данные: изображение / gif;base64,r0lgodlhaqabaiaaaaaaaap ///yH5BAEAAAAAALAAAAAABAAEAAIBRAA7

Затем я разделил строку на нужный мне раздел, который находится после ‘,’.

     public SqlDataReader reader;
    public String ClientSigImg;
    public String ClientSigImg1;

    ClientSigImg = reader[0].ToString();
    ClientSigImg1 = ClientSigImg.Split(',')[1];
 

Таким образом, приведенная выше строка base64 изменяется при вводе пользователем и вместо ручного ввода, как показано ниже

     string base64 = @"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
    byte[] imageBytes = Convert.FromBase64String(base64);
 

Я хотел бы заменить эту длинную строку на:

     string base64 = @""  ClientSigImg1  "";
    byte[] imageBytes = Convert.FromBase64String(base64);
 

Комментарии:

1. Пожалуйста, ОТЛАДЬТЕ свой код шаг за шагом, чтобы понять, почему строка не была массивом из 2.

2. Вы понимаете string base64 = @"" ClientSigImg1 ""; , что на самом деле это не делает ничего, что не string base64 = ClientSigImg1; делает?

Ответ №1:

Похоже, что:

 ClientSigImg = reader[0].ToString();
 

НЕ возвращает строку с запятой в ней (пожалуйста, отладьте и подтвердите). Это означает, что вы увидите ошибку, которую вы описываете, при выполнении этой строки кода:

 ClientSigImg1 = ClientSigImg.Split(',')[1];
 

Это связано с тем, что индекс 1 не будет существовать. Итак, убедитесь, что вы действительно получаете правильные данные, возвращенные из вашего запроса.

Кроме того, как только ваш запрос вернет правильные данные, вы можете привести в порядок свой код и просто использовать:

 byte[] imageBytes = Convert.FromBase64String(ClientSigImg1);
 

Это потому, что:

 string base64 = @""  ClientSigImg1  "";
 

На самом деле ничего не делает, кроме добавления пустой строки до и после вашей строки, следовательно, ничего не добавляет!

Комментарии:

1. я подтвердил и пробовал весь вчерашний день, и все равно ничего. я отладил и могу подтвердить, что он возвращает строку.

2. Я имел в виду строку, СОДЕРЖАЩУЮ запятую. При отладке вы видите запятую в строке? Возможно, стоит поместить split в отдельную строку, var splitDebug = ClientSigImg.Split(','); а затем перешагнуть через нее, чтобы увидеть, что splitDebug содержит (я предполагаю, что длина = 1, поэтому нет индекса 1).