누구든지 바이트 스트림에 실제로 어떤 내용이 들어 있는지 설명 할 수 있습니까? 바이트 (16 진 데이터) 또는 이진 데이터 또는 영어 문자 만 포함합니까? 또한 "원시 데이터"라는 용어에 대해 혼란스러워합니다. 누군가가 "4 바이트 데이터를 뒤집으라고"요청한 경우 데이터가 16 진 코드 또는 2 진 코드라고 가정하면 어떻게됩니까?
누구든지 바이트 스트림에 실제로 어떤 내용이 들어 있는지 설명 할 수 있습니까? 바이트 (16 진 데이터) 또는 이진 데이터 또는 영어 문자 만 포함합니까? 또한 "원시 데이터"라는 용어에 대해 혼란스러워합니다. 누군가가 "4 바이트 데이터를 뒤집으라고"요청한 경우 데이터가 16 진 코드 또는 2 진 코드라고 가정하면 어떻게됩니까?
답변:
바이트 스트림에는 바이트가 포함됩니다. 실제로는 1과 0으로 구성된 8 비트입니다. 숫자를 나타내는 경우 0에서 255 사이의 숫자가됩니다 (IP 주소의 4 숫자가 항상 0에서 255 사이 인 이유는 우연이 아닙니다). 바이트 스트림 은 일반적으로 순환 버퍼를 유지하는 데 사용되는 기본 기본 바이트 배열을 숨기는 정교한 인터페이스입니다 (버퍼를 채우고 누군가 비우기를 기다릴 때 버퍼를 다시 채우는 것).
도대체 무엇을 나타내는가? 텍스트 파일이나 이미지 또는 라이브 비디오 스트림을 나타낼 수 있습니다. 무엇는 것은 그것을 읽는 사람의 상황에 따라 전적으로 의존한다. 16 진수 표현은 같은 말을하는 또 다른 방법이지만 때로는 숫자가 아닌 16 진수 표현으로 바이트를 관리하는 것이 더 편리하지만 같은 것입니다.
원시 데이터를 언급 할 때는 일반적으로 바이트 데이터를 참조합니다. "이미지 파일입니다!"라는 태그가없는 데이터가 제공됩니다. 일반적으로 데이터가 전체적으로 나타내는 것을 신경 쓰지 않으면 원시 데이터 만 처리합니다. 예를 들어, 이미지를 흑백 버전으로 변환하려면 이미지의 원시 데이터를 읽고 3 바이트마다 읽습니다 (실제로 붉은 색, 녹색, 파란색), 숫자 값을 더하고 3으로 나눈 다음 해당 값을 3 번 씁니다. 본질적으로 내가하고있는 일은 픽셀의 빨강, 녹색 및 파랑 값을 평균화하고 그와 동등한 회색 픽셀을 만드는 것입니다. 그러나 "바이트 단위"수준에서 데이터에 대한 작업 수행에 대해 이야기 할 때는
또는 파일을 데이터베이스에 저장하려고하지만 "원시 데이터"를 Blob 데이터 형식으로 삽입하도록 요청합니다. 이것은 단순히 파일의 데이터를 데이터베이스가 이해하고 관리 할 수있는 큰 바이트 배열로 변환하는 것을 의미합니다. 데이터베이스에서 해당 값을 검색 할 때 처음에 데이터베이스에 제공 한 값은 단순히 하나의 큰 바이트 배열이라는 것을 알 수 있습니다. 해당 데이터가 파일 인 경우 프로그래머는 파일을 한 번에 한 바이트 씩 읽는 것처럼 해당 바이트 데이터를 재 해석해야합니다.
누군가가 "4 바이트 데이터를 뒤집으라고"요청했다면 빅 엔디안 대 리틀 엔디안 숫자 해석을 참조한다고 가정합니다.이 숫자는 가장 중요하거나 가장 작은 바이트로 시작합니다. 숫자가 빅 엔디안 또는 리틀 엔디안으로 표시되는지 여부는 중요하지 않습니다. 단지 숫자를 읽는 모든 시스템이 지속적으로 해석한다는 것입니다.
이것은 실제 숫자 표현 (또는 그 문제에 대한 16 진수 표현)이 변경되었다고 말하는 것이 아니라 단순히 4 바이트가 숫자를 만드는 순서를 바꿔야한다는 것입니다. 따라서 0x01, 0x02, 0x03 및 0x04가 있다고 가정하십시오. 이것을 반대로 바꾸려면 대신 0x04, 0x03, 0x02, 0x01이 필요합니다. 시스템은 아마도이 4 바이트를 역순으로 읽었으며 이미 역순으로 값을 읽었으므로 값은 원시 데이터에서 의도 한 것과 매우 동일한 것으로 해석됩니다.
나는 그것이 그것을 설명하기를 바랍니다!
바이트는 단순히 정보의 한 단위입니다. 무엇이든 가능합니다. 바이트 자체는 아무 의미가 없으며 어떤 의미를 부여해야합니다.
그래서, 그것을 확장하려면-
바이트 (16 진 데이터) 또는 이진 데이터 또는 영어 문자 만 포함합니까?
16 진 데이터는 2 진 데이터와 동일합니다. 데이터를 표시하는 다른 방법 일뿐입니다. 예를 들어 0x41 = 0b01000001 = 'A'= 65 (10 진수)입니다. 영어 문자는 그 일부일뿐입니다.
누군가가 "4 바이트 데이터를 뒤집으라고"요청한 경우 데이터가 16 진 코드 또는 2 진 코드라고 가정하면 어떻게됩니까?
16 진은 데이터 의 표현 일 뿐이므로 어떻게 생각하는지는 중요하지 않습니다. 의 데이터가있는 경우 데이터 0x65 0x66 0x67 0x68
를 되돌릴 수 있습니다 0x68 0x67 0x66 0x65
. 이 데이터를 문자로보고 있다면 원래는 A B C D
있지만 지금은을 갖습니다 D C B A
.
바이트 스트림으로 돌아 가면 데이터 시퀀스 일뿐입니다. 사용하려면 데이터가 무엇을 나타내는 지 알아야합니다. 텍스트 파일을 읽는 중이라면 파일을 읽을 때 얻을 수있는 바이트 스트림은 일종의 문자 일뿐입니다. 실행 파일에는 인쇄 할 수없는 문자가 많이 있으므로 이진 파일 이라고 합니다. 분명히 텍스트 편집기에서 실행 파일을 열 수는 있지만 유용한 것은 없습니다.
int reverseX = ((x & 0xFF000000) >> 24) + ((x & 0x00FF0000) >> 8) + ((x & 0x0000FF00) << 8) + ((x & 0x000000FF) << 24);
문자 그대로 각 바이트를 가져 와서 올바른 위치로 옮기고 다른 바이트와 결합합니다.
바이트 스트림은 순서가 지정된 바이트 시퀀스입니다. 선행 바이트가없는 첫 번째 바이트가 있습니다. 그 후속은 두 번째 바이트입니다. 오늘날, 바이트는 8 비트로 구성되는 것으로 널리 이해된다. 더 정확하게하려면 옥텟 스트림 이라는 용어를 사용합니다 과 octet . 폭이 8 비트가 아닌 바이트를 가진 컴퓨터가 여전히 존재합니다.
16 진수는 숫자를 쓰는 방법이며 이진 데이터 의 인쇄 표현 으로 사용됩니다. 16 진법은 실제로 텍스트입니다. 예를 들어, 16 진 값 FE
은 바이트 ( 11111110
십진수 값을 갖는 비트) 를 나타낼 수 있습니다 255
. 그러나 FE
실제로는 문자 F
와 로 구성된 문자열이며 US-ASCII 또는 ISO-646 문자 세트에서 2 바이트 E
가 필요합니다 ! 이 두 바이트는 무엇 이며 , 값이 254 인 단일 바이트는FE
FE
는 인쇄 된 표기법으로 나타냅니다 .
통신 채널 또는 파일 핸들 또는 일부 장치가 바이트 스트림을 전달하는 것으로 설명되고 다른 정보가 제공되지 않으면 거의 확실하게 수행됩니다. 않은 바이트가 16 진 텍스트로 표시되므로 스트림의 각 추상 바이트가 필요합니다 두 물리 바이트.
원시 데이터는 단순히 "비트 배열"이상의 구조로 해석되지 않는 비트를 의미합니다. 원시 데이터는 일반적으로 구조를 가지며 무언가를 나타냅니다. 그러나 원시 데이터로 볼 때 순간 해석을 무시하고 있습니다 (예를 들어, 데이터 유형의 원시 표현을보고 데이터의 정확성을 확인합니다) 비트 수준 세부 정보까지) 또는 해석을 사용할 수 없습니다 (데이터가 있지만 데이터의 구조와 해당 데이터의 내용을 이해하지 못함).
바이트는 8 비트입니다. 비트는 0 또는 1입니다. "미가공 데이터"는 단지 한 바이트의 흐름입니다. 바이트 스트림은 파일, 네트워크 연결, 직렬화 된 객체, 난수 생성기 등에서 올 수 있습니다.
바이트를 표시하는 방법에는 이진 (01110110), 16 진수 = 16 진 (7C), 8 진 (0271) 또는 10 진수 (215)와 같은 여러 가지 방법이 있습니다. 모든 경우에 최대 값은 255 (기본 10)입니다.
때때로 바이트는 ASCII와 같은 문자에 할당됩니다. 유닉스 커맨드 라인에 "ascii"를 입력하면, 바이트 베일 0-255 또는 (0-FF 16 진수)를 연관된 문자에 매핑하는 큰 테이블을 얻게됩니다. 예를 들어, 공백은 x20이고 "A"는 x40입니다. 일부 바이트 값은 제어 문자에 매핑되며 인쇄 할 수 없습니다. 그러나 바이트 자체는 문자가 아니며 비트 묶음 일뿐입니다. 숫자
"역 4 바이트"는 바이트 123 42 231 0을 가져 와서 순서를 뒤집는 것입니다-0 231 42 123. 바이트 스팀에 적용됩니다. 아마도 4 바이트를 읽고, 반대로, 다음 4 바이트를 읽습니다. .
(BTW는 바이트 단위로 255보다 큰 숫자를 나타내려면 하나 이상의 바이트를 사용해야하기 때문에 문제가 관련이 있습니다. 그러나 문제는 "가장 큰"바이트가 먼저 오거나 마지막에 오는가? 빅 엔디안 또는 리틀 엔디안-원시 바이트 스트림에서 바이트를 뒤섞는 것이 왜 유용한 지에 대한 더 많은 배경을 찾으십시오.)