Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6386961
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 25, 20262026-05-25T03:05:36+00:00 2026-05-25T03:05:36+00:00

I want to understand this syntax to fix it for crc16 function : unsigned

  • 0

I want to understand this syntax to fix it for crc16 function :

unsigned short crc16(void *memptr, int len) {
  int j;
  unsigned short crc = CRC16_INIT ;
  while(len--){
    crc ^= *((unsigned char *)memptr)++;
    for(j=0; j<8; j++){
      if(crc & 1)
        crc =(USHORT)( (crc>>1) ^ CRC16_POLY );
      else
        crc =(USHORT)( crc>>1);
    }//for
  }//while
  return crc ;
}

it was working code on older compiler and now I ‘ve got

error : IntelliSense: expression must be a modifiable lvalue

on this line:

crc ^= *((unsigned char *)memptr)++;

Compiler error : error C2105: ‘++’ needs l-value

Recoded to it (hope it’s correct):

unsigned char oldValue = *((unsigned char *)memptr);
++*((unsigned char *)memptr);
crc ^= oldValue; // <--- WRONG



crc ^= (*((unsigned char *)memptr))++;  // <--- WRONG
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-25T03:05:36+00:00Added an answer on May 25, 2026 at 3:05 am

    ASM-version of this function (not that optimized, but still 0x59 bytes vs my compiler’s 0x69 of C++ version).

    If you are familiar with ASM, it will be enough to understand mentioned C++ code segment and the whole function overall.

    unsigned short crc16(void *memptr, int len)
    {
     unsigned short crc = 0;//CRC16_INIT;
    
     __asm
     {
      MOV       ESI, len
    while_s:
      DEC       ESI
      CMP       ESI, 0
      JL        while_e
      XOR       EAX, EAX
      MOV       AX, WORD PTR DS:[crc]
      MOV       EBX, len
      SUB       EBX, ESI
      DEC       EBX
      MOV       ECX, memptr
      MOV       BL, BYTE PTR DS:[ECX+EBX]
      XOR       AL, BL
      XOR       BL, BL
     for_s:
      CMP       BL, 8
      JGE       for_e
      INC       BL
      MOV       DX, AX
      SHR       AX, 1
      AND       DX, 1
      JE        for_j
      XOR       AX, 0xA001//CRC16_POLY
     for_j:
      JMP       for_s
     for_e:
      MOV       WORD PTR DS:[crc], AX
      JMP       while_s
    while_e:
      XOR       EAX, EAX
      MOV       AX, WORD PTR DS:[crc]
     }
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I understand this is a subjective question but I want to see how others
This is probably an easy question, but I want to understand better how Apache
Not that I would ever need to do this, but I want to understand
I want to understand how the mechanism of Shadowing and Nested function work. For
I want to do something like this in my geometry shader: uniform int maxOutputVert;
I am trying to understand the jquery plugin syntax, because I want to merge
I see this syntax a lot and don't understand the reasoning behind it. I
I want to understand if code snippets are what I am looking for here.
I want to understand the use of xargs man in Rampion's code : screen
I want to understand the external linkage and internal linkage and their difference. I

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.