#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).