Сравнение строк в задаче MATLAB - PullRequest
1 голос
/ 03 августа 2011

Я возился с моей программой, и я использовал модифицированную версию urlread, которая позволяет выполнять BASIC-аутентификацию. Проблема в том, что я должен включить следующую строку кода в базовую функцию urlread:

urlConnection.setRequestProperty('Authorization', 'Basic passphrase');

... где парольная фраза - это закодированная в base64 строка 'user: pass'. Если я поместу фразу-пароль непосредственно в строку в этой строке, программа будет работать нормально, проблема начнется, когда я попытаюсь объединить, чтобы получить эту результирующую строку «Основная фраза-пароль». Изначально у меня было только:

['Basic', ' ', passphrase]

После того, как это не сработало, я немного поэкспериментировал и поэкспериментировал в окне командной строки.

passphrase = 'somerandompassphrase';
teststr1 = ['Basic', ' ', passphrase];
teststr2 = ['Basic', ' ', 'somerandompassphrase'];
teststr3 = 'Basic somerandompassphrase';
strcmp(teststr1, teststr2)
strcmp(teststr1, teststr3)
strcmp(teststr2, teststr3)

Выходное значение равно 1 или true для каждого (как и ожидалось). Однако, если я беру base64encode «somerandompassphrase» (это «c29tZXJhbmRvbXBhc3NwaHJhc2U = '):

encoded = base64encode(passphrase);
teststr1 = ['Basic', ' ', encoded];
teststr2 = ['Basic', ' ', 'c29tZXJhbmRvbXBhc3NwaHJhc2U='];
strcmp(teststr1, teststr2)

Выход равен 0 или false. Разве это не должно быть правдой, хотя? Функцию base64encode можно найти здесь .

Даже из быстрого теста:

strcmp(encoded, 'c29tZXJhbmRvbXBhc3NwaHJhc2U=')

Выход по-прежнему равен 0.

Пожалуйста, помогите, я понятия не имею, что происходит.

Ответы [ 2 ]

2 голосов
/ 03 августа 2011

Как показано здесь , вы также можете использовать кодировщик base64 из библиотеки Java-кодека Apache Commons , которая поставляется в комплекте с MATLAB и доступна на Путь к классам:

encoder = org.apache.commons.codec.binary.Base64();
b64str = char( encoder.encode(passphrase-0) )';
1 голос
/ 03 августа 2011

Я на самом деле понял это прямо перед тем, как опубликовать вопрос, но я решил, что буду продолжать и оставлю это, если люди столкнутся с той же проблемой, что и я.

Проблема связана с функцией base64encode. Он автоматически добавляет символ новой строки в конец строки, в результате чего функция strcmp возвращает false. Чтобы это исправить, вы можете включить параметр для необязательного параметра в функцию base64encode, если вы добавите пустую строку, она не добавит символ новой строки в конец, вызывая его работу.

encoded = base64encode(passphrase, '');
...