앙앙123
98
2021-05-10 17:09:57 작성 2021-05-10 17:11:59 수정됨
5
133

c프로그래밍 질문입니다



예를들어 4바이트 정수 상수인 10은  00000000 00000000 00000000 00001010 으로 나타나는데 00000000 00000000 / 00000000 00001010 이런식으로 나눠서 각각을 16진수로 변환


정수를 저렇게 2바이트씩 나누어서 각각변환을 어떻게 하나요??

0
  • 답변 5

  • 구르
    25
    2021-05-10 17:21:00

    4바이트 정수를  정수 & 0xFF00 로 상위 16비트 가져오고, 정수 & 0x00FF로 하위 16비트를 가져와서 변환하면 어떨까요

  • 앙앙123
    98
    2021-05-10 17:38:39

    아 감사합니다 한번 해볼게요!!

  • 앙앙123
    98
    2021-05-10 18:00:32

    저 조금만 자세하게 알려주실 수 있나요?? 

  • 구르
    25
    2021-05-10 19:40:12 작성 2021-05-10 19:42:31 수정됨

    음 그러면 먼저 몇 가지 알아두셔야 할게 있어요

    대표적인 것들이라 인터넷에 치시면 자세하게 나올테니 간략하게만 적어드릴게요

    1. 비트 연산

    and, or, xor 등 여러 비트 연산자 중에서 and 연산자를 사용할 거에요

    and 연산자는 두 비트가 같으면 1, 다르면 0의 결과를 줘요

    c언어에서는 & 하나로 표현하며, 예를 들자면 1 & 1은 1인 셈이에요

    2. 16진수, 2진수 표현식

    개발하는 환경에 따라 컴파일이 안될 수 있지만, 꼭 개발 환경이 아니더라도 2진수는 0b0001 형식으로 표현하고, 16진수는 0xFF식으로 표현해요

    8비트는 1바이트이므로 0xF와 0b11111111는 같은 의미랍니다


    자 그러면 4바이트 정수 10과 0x00FF를 and 연산을 해보자면

    0000 0000 / 0000 0000 / 0000 0000 / 0000 1010 & 0000 0000 / 0000 0000 / 1111 1111 / 1111 1111

    으로 표현할 수 있어요 ( / 는 1바이트씩 보기 편하도록 임의로 넣었어요 )

    그러면 and 연산자에 의해서 각 비트별로 and 연산을 수행하게 돼요

    그러면 and연산자는 두 수가 같아야지만 1의 결과를 주게 되니 뒤에서 두 번째 비트와 뒤에서 네 번째 비트만 1의 결과를 주겠죠 ?

    c언어 표현으로는 int nLowByte = 10 & 0xFF;로 코딩해주시면 된답니다


    처음이라 헷갈리신다면 32비트와 32비트를 세로 덧셈 계산식을 쓰는 것 처럼 각 비트씩 자리를 맞춰서 세로로 써보세요


    그렇다면 결과적으로 질문자님이 질문하신 2바이트씩 나눌 수 있게 돼요

    근데 결과로 받아온 수는 10진수니 16진수로 변환하는 함수를 써주셔야 해요

    제 기억에는 그 함수가 문자열을 인자로 받으니 결과 값을 문자열로 변환해서 사용해주셔야 할 거에요


    아 그리고 참고로 10진수 10은 개발하시는 환경에 따라서 0000 0000 / 0000 0000 / 0000 0000 / 0000 1010이 될 수도 혹은  0000 1010 / 0000 0000 / 0000 0000 / 0000 0000이 될 수도 있어요

    관련 정보는 리틀 엔디안, 빅 엔디안으로 검색해보시면 잘 나올거에요

  • 앙앙123
    98
    2021-05-10 21:59:20
    아 정말 감사합니다 덕분에 이해가 됐습니다!!
  • 로그인을 하시면 답변을 등록할 수 있습니다.