data
및 data.bytes
은 완전히 다른 두 가지 유형입니다. data
은 NSData
의 인스턴스이고 data.bytes
은 원시 포인터 (const void *
)입니다. 디버거에서 po
("인쇄 개체"의 줄임말)을 호출하면 NSObject
에서 상속받은 내용에 -description
을 호출하거나 그렇지 않은 경우 값을 인쇄합니다. 당신 po data
, 그것은 [data description]
를 호출하고 그 밖의 결과를 출력하는 경우 data
이후이 경우
은 (
-description
이있는)을
NSData
이다;
NSData
은 내용을 멋지게 포맷하는 방법을 알고 있기 때문에 인쇄가 잘됩니다.
data.bytes
가
void *
때문에
그러나, 그것을 인쇄하는 방법을 알 수있는 디버거 방법이 없습니다 (무엇을 가리킬 수 있습니다 void *
는, 그것은 전적으로 당신에게 달려 해석하는 방법) 그래서 그냥 포인터 자체를 출력 .
디버거에서 직접 데이터를 인쇄하려면 포인터를 해석하고 인쇄하는 방법을 알려줄 수 있습니다. 당신이 데이터 덩어리가 n
바이트는 것을 알고 있다면, 다음과 같은 명령을 실행할 수 있습니다 : <n>
가 데이터 (예를 들어, uint8_t (*)[8])
)의 문자 길이로 대체
p/x *(uint8_t (*)[<n>])data.bytes
. *(uint8_t (*)[<n>])data.bytes
은 data.bytes
을 n
바이트 (메모리에서 얼마나 많은 데이터를 읽을 지 알 수 있도록 길이를 제공)의 배열로 다시 해석하도록 디버거에 지시하고 p/x
은 찾은 바이트의 16 진 값을 인쇄하도록 지시합니다.
답장을 보내 주셔서 감사합니다. 지금은 꽤 분명합니다. 하지만 콘솔에서'po [data bytes]'명령을 사용하면 0x14ee2ee8과 같은 내용이 출력됩니다. 그리고 'po bytes' 명령을 사용할 때, bytes는 [data bytes]의 결과이고, "3w \ x80 \ x88 \ x17"과 같은 것을 출력합니다. 정확히'po [data bytes]'에 의해 반환되는 값은 무엇입니까? –
'[data bytes]'변수를'bytes' 변수에 저장하면'bytes'의 타입은 무엇입니까? 당신의 선언은 어떻게 생겼습니까? –
'bytes'는'const char *'입니다. –