0
16 진수 문자열을 유니 코드 UTF-8 문자 열로 변환하는 함수를 작성하려고했습니다. 이 함수를 한 번 호출하면 모든 것이 정상입니다. 그러나 함수가 동일한 인수 또는 다른 인수를 사용하여 연속으로 두 번 호출되면 두 출력 문자열은 의미가 없습니다. 나는 두 번째 전화를 언급하는 경우Arduino IDE에서 두 번째 함수 호출이 이전 호출 결과를 변경하는 이유는 무엇입니까?
void HEX2String(String* HEXstr, String* str) {
String s2 = "", s3 = "";
long c, c1, c0;
char ch[2] = { 0 };
for (int i = 0; i <= HEXstr->length() - 4; i = i + 4) {
s2 = HEXstr->substring(i, i + 1) + "x" + HEXstr->substring(i + 1, i + 4);
c = (hex2long(&s2));
if (c < 255)
*str += String((char)c);
else {
c1 = (128 + (c & B111111));
c0 = (192 + (c >> 6));
ch[1] = c1;
ch[0] = c0;
str->concat(ch);
}
}
}
String str1 = "0628064700200646062706450020062E062F0627000A0633064406270645000A064806310648062F0020062806470020063306CC0633062A06450020062A064806330637";
String str = "0628064700200646062706450020062E062F0627000A0633064406270645000A064806310648062F0020062806470020063306CC0633062A06450020062A064806330637000A00730061006C0061006D0020006200610072002000730068006F006D0061";
String msg = "";
void setup() {
Serial.begin(9600);
//First call
HEX2String(&str, &msg);
Serial.println(msg);
msg = "";
//Second call
HEX2String(&str1, &msg);
Serial.println(msg);
}
void main() {
//
}
는 시리얼 모니터의 출력은 다음과 같습니다
سلام
ورود به سیستم توسط
salam bar shoma
그것은 올바른 것입니다. 두 번째 호출에 주석이 없으면 직렬 모니터의 출력은 다음과 같습니다.
ب⸮⸮ه⸮⸮ ن⸮⸮ا⸮⸮م⸮⸮ خ⸮⸮د⸮⸮ا⸮⸮
س⸮⸮ل⸮⸮ا⸮⸮م⸮⸮
و⸮⸮ر⸮⸮و⸮⸮د⸮⸮ ب⸮⸮ه⸮⸮ س⸮⸮ی⸮⸮س⸮⸮ت⸮⸮م⸮⸮ ت⸮⸮و⸮⸮س⸮⸮ط⸮⸮
salam bar shomaب⸮⸮ه⸮⸮ ن⸮⸮ا⸮⸮م⸮⸮ خ⸮⸮د⸮⸮ا⸮⸮
س⸮⸮ل⸮⸮ا⸮⸮م⸮⸮
و⸮⸮ر⸮⸮و⸮⸮د⸮⸮ ب⸮⸮ه⸮⸮ س⸮⸮ی⸮⸮س⸮⸮ت⸮⸮م⸮⸮ ت⸮⸮و⸮⸮س⸮⸮ط⸮⸮
제목의 일부 케이스와 문법 오류를 수리. 다시 추가 한 것으로 보이므로 수리했습니다. 그것을 되돌리지 마십시오. 자원 봉사자 편집자의 개량이 여러분에게 유리합니다. – halfer
[답변으로 문제가 해결되면이를 수락해야합니다.] (https://stackoverflow.com/help/someone-answers) 답변으로 "감사합니다"를 추가하거나 "* (해결 된 문제) *"를 추가하지 마십시오. "제목에. –