1바이트 문자인지의 여부를 검증?

saintrole의 이미지

안녕하세요. bbs.kldp 가족분들. ^^

새해복 많이 받으시구요~

질문이 하나 있습니다.

밑에 예시를 뒀는데요. if(0x81... ... )이부분 설명좀 부탁드려요.

어떻게 검증하는건가요?



/* 1바이트 문자인지의 여부를 검증한다 */
int IsByte1st(int c)
{
        // 문자열의 char형 문자도 다룰 수 있도록 unsigned char형으로 변환한다
        unsigned char uch = c;
        // 1 바이트 문자인지 여부를 검증한다
        if (uch >= 0x81 && uch <= 0x9f || uch >= 0xe0 && uch <= 0xfc)
                return 1;
        else
                return 0;
}
dangsan49의 이미지

한글코드(2byte)인지 영문코드(1byte)인지를 가려주는 로직 같군요.

확실한지는 몰겠습니다.
ㅎㅎㅎㅎ

그런데 제가 이해한 대로라면 한 바이트 문자일때
return 이 0이 되는 군요 ?
함수 이름대로라면 1이 되어야 하는거 아닌가요?

VENI, VIDI, VICI - Caesar, Gaius Julius -

atdda의 이미지

2byte 문자의 Leading byte인지를 판별하는 코드입니다.
그래서 함수이름도 IsByte1st인것 같군요.

주석이 아주 틀리지는 않습니다만, 당산님처럼 오해할 수도 있어서 적절치는 않은 듯 하네요.

    if (uch >= 0x81 && uch <= 0x9f || uch >= 0xe0 && uch <= 0xfc)

위의 조건문이 Leading Byte인지 판별하는 부분입니다. 저 영역에 있으면 Leading Byte. 곧 뒤이어 오는 문자는 이 녀석과 한쌍이겠지요.

한데, 위의 leading byte character 판별법이 완벽하지는 않습니다. 제 기억이 맞다면, 위의 예는 '일본어'에만 한정됩니다. 일본어와 다른 2byte 문자(한글 등)가 다르거든요. 위를 기준으로 하면 다른 언어를 파싱할 때 문제가 생기고, 한글의 경우를 기준으로 하면 일본어를 파싱할 때 문제가 생깁니다.

아마 한글인 경우에는

    if (uch >= 0x81 &&  uch <= 0xef)

였던것 같습니다.

Double Byte Character 등으로 googling 해보시면 더 많은, 정확한 정보가 나올 겁니다.

May The Force Be With You.

saintrole의 이미지

아..

당산님 , atdda님답변 감사합니다.

책의 원판이 일본어책이네요.

말씀대로

저 구문은 일본어를 구분해내기 위한 판별코드인거 같네요.

바쁘신대도 답변해주셔서 감사합니다.

sysmoon의 이미지

어떤 책 예제 보고 올리신 글인지 알겠네요 영진 함수 사용법
저도 이책 지금 보고 있습니다.
저자가 일본사람이라 그런 것 같네요.
참고하세요 ^^

AirPlug

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.