void 포인터에서 잘못된 데이터가 구조체에 복사되었습니다.

코덱스 10

좋아, 나는 이것을 시도하고 고칠 것들이 부족합니다.

다음과 같은 구조체가 있습니다.

typedef struct
{
   u8int  NodeType;
   u32int Group;
   u32int Direction;
   u16int ID;

} tsTargetNode;


void vTrackNode(const uint8 *pu8Val, uint8 u8Len, void *pvCbData)
{
   /* Copy data */
   memcpy(pvCbData, pu8Val, u8Len);

   /* Doing this gives the wrong data */
   //tsTargetNode *node = (tsTargetNode *) pvCbData;  

   /* Doing this gives the right data */
   memcpy(&tsTargetNode.NodeType, pvCbData, 1);
   memcpy(&tsTargetNode.Group, pvCbData+1, 4);
   memcpy(&tsTargetNode.Direction, pvCbData+1+4, 4);
   memcpy(&tsTargetNode.ID, pvCbData+1+4+4, 2);
}

예 : 전달 된 데이터 * pu8Val = 0x AA BB CC DD EE FF 11 22 33 44 55 66 77 88 99 00

포인터를 사용하여 검색 한 데이터는 다음과 같습니다.

NodeType  = 0xAA
Group     = 0xFF112233
Direction = 0x44556677
ID        = 0x8899 

하지만 수동으로 memcpy, 검색 한 데이터가 정확합니다.

NodeType  = 0xAA  
Group     = 0xBBCCDDEE
Direction = 0xFF112233
ID        = 0x4455

NodeType에 4 바이트를 복사하려고 시도하는 첫 번째 세트처럼 보입니다.

포인터 복사를 잘못하고 있습니까? 아니면 장치 / HW 문제 일 수 있습니까?

쓸모없는

컴파일러는 구조의 멤버 사이에 패딩을 자유롭게 추가 할 수 있으므로 각 멤버는 플랫폼에 적합한 모든 항목에 정렬됩니다. 여기서는 32 비트처럼 보입니다. 인쇄를 시도 하고 필드가 어떻게 배치되는지 확인하기 sizeof(tsTargetNode)위해 초기화 된 파일에서 많은 바이트를 덤프합니다 tsTargetNode.

어떤 컴파일러를 사용하고 있는지는 말하지 않았지만 구조에 패딩을 비활성화하는 컴파일러 별 방법이있을 것입니다. 그렇게하면 메모리 레이아웃이 버퍼와 일치합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

구조체가 잘못된 sizeof 및 void 포인터를 제공하는 이유

분류에서Dev

다른 구조체에서 내부 구조체를 선언하면 오류가 발생합니다. 구조체 사용이 잘못되었습니다.

분류에서Dev

foreach () "잘못된 인수"에 잘못된 인수가 제공되었습니다.

분류에서Dev

데이터베이스에 잘못된 값이 삽입되었습니다.

분류에서Dev

foreach ()에 대해 잘못된 잘못된 인수가 제공되었습니다.

분류에서Dev

데이터 소스 개체가 잘못되었습니다.

분류에서Dev

반복을 사용할 때 키워드에 전달 된 인수의 수가 잘못되었습니다.

분류에서Dev

잘못된 데이터가 선택되었습니다.

분류에서Dev

C ++ 연결 Excel 오류 : "수식에 사용 된 값의 데이터 형식이 잘못되었습니다."

분류에서Dev

Oracle 데이터베이스에 대해 잘못된 쿼리가 생성되었습니다.

분류에서Dev

데이터 테이블 webapi 호출에 잘못된 요청 URI가 제공되었습니다.

분류에서Dev

핵심 데이터의 setPropertiesToFetch에 잘못된 키 경로가 전달되었습니다.

분류에서Dev

MySQL의 st_geometryfromtext 함수에 잘못된 GIS 데이터가 제공되었습니다.

분류에서Dev

인증 사용자 데이터를 표시하려고 할 때 foreach ()에 대해 잘못된 인수가 제공되었습니다.

분류에서Dev

소켓이 dataInputStream에서 잘못된 데이터를 읽었습니다.

분류에서Dev

구조가 잘못된 XML 파일에서 데이터 추출

분류에서Dev

잘못된 데이터가 다른 시트로 복사되고 있습니다.

분류에서Dev

PHP : 동적 데이터를 내보내는 동안 foreach ()에 잘못된 인수가 제공 되었습니까?

분류에서Dev

일반`c`에서`void *`포인터없이 일반 데이터 구조를 설계 할 수 있습니까?

분류에서Dev

사용자 정의 벡터 클래스에서 잘못된 생성자가 호출되었습니다.

분류에서Dev

sqlite 데이터베이스에 대한 쿼리가 잘못되었습니다.

분류에서Dev

clEnqueueWriteBuffer가 잘못된 데이터를 VRAM에 씁니다.

분류에서Dev

Python이 arduino에서 잘못된 데이터를 읽습니다.

분류에서Dev

활동이 원래 여기에 추가 된 창이 유출되었습니다 (로그인 데이터가 잘못된 경우).

분류에서Dev

Asp.net mvc의 사전에 잘못된 modelItem이 전달되었습니다.

분류에서Dev

이 코드는 포인터 배열에서 잘못된 첫 번째 포인터를 반환합니다.

분류에서Dev

이것이 다른 구조체에 중첩 된 구조체에서 왔을 때 malloc char 포인터

분류에서Dev

OpenGL 텍스처에 잘못된 데이터가 포함되어 있습니다. 무슨 일입니까?

분류에서Dev

구조 포인터에 잘못된 값이있는 이유

Related 관련 기사

  1. 1

    구조체가 잘못된 sizeof 및 void 포인터를 제공하는 이유

  2. 2

    다른 구조체에서 내부 구조체를 선언하면 오류가 발생합니다. 구조체 사용이 잘못되었습니다.

  3. 3

    foreach () "잘못된 인수"에 잘못된 인수가 제공되었습니다.

  4. 4

    데이터베이스에 잘못된 값이 삽입되었습니다.

  5. 5

    foreach ()에 대해 잘못된 잘못된 인수가 제공되었습니다.

  6. 6

    데이터 소스 개체가 잘못되었습니다.

  7. 7

    반복을 사용할 때 키워드에 전달 된 인수의 수가 잘못되었습니다.

  8. 8

    잘못된 데이터가 선택되었습니다.

  9. 9

    C ++ 연결 Excel 오류 : "수식에 사용 된 값의 데이터 형식이 잘못되었습니다."

  10. 10

    Oracle 데이터베이스에 대해 잘못된 쿼리가 생성되었습니다.

  11. 11

    데이터 테이블 webapi 호출에 잘못된 요청 URI가 제공되었습니다.

  12. 12

    핵심 데이터의 setPropertiesToFetch에 잘못된 키 경로가 전달되었습니다.

  13. 13

    MySQL의 st_geometryfromtext 함수에 잘못된 GIS 데이터가 제공되었습니다.

  14. 14

    인증 사용자 데이터를 표시하려고 할 때 foreach ()에 대해 잘못된 인수가 제공되었습니다.

  15. 15

    소켓이 dataInputStream에서 잘못된 데이터를 읽었습니다.

  16. 16

    구조가 잘못된 XML 파일에서 데이터 추출

  17. 17

    잘못된 데이터가 다른 시트로 복사되고 있습니다.

  18. 18

    PHP : 동적 데이터를 내보내는 동안 foreach ()에 잘못된 인수가 제공 되었습니까?

  19. 19

    일반`c`에서`void *`포인터없이 일반 데이터 구조를 설계 할 수 있습니까?

  20. 20

    사용자 정의 벡터 클래스에서 잘못된 생성자가 호출되었습니다.

  21. 21

    sqlite 데이터베이스에 대한 쿼리가 잘못되었습니다.

  22. 22

    clEnqueueWriteBuffer가 잘못된 데이터를 VRAM에 씁니다.

  23. 23

    Python이 arduino에서 잘못된 데이터를 읽습니다.

  24. 24

    활동이 원래 여기에 추가 된 창이 유출되었습니다 (로그인 데이터가 잘못된 경우).

  25. 25

    Asp.net mvc의 사전에 잘못된 modelItem이 전달되었습니다.

  26. 26

    이 코드는 포인터 배열에서 잘못된 첫 번째 포인터를 반환합니다.

  27. 27

    이것이 다른 구조체에 중첩 된 구조체에서 왔을 때 malloc char 포인터

  28. 28

    OpenGL 텍스처에 잘못된 데이터가 포함되어 있습니다. 무슨 일입니까?

  29. 29

    구조 포인터에 잘못된 값이있는 이유

뜨겁다태그

보관