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

  • SEARCH
  • Home
  • 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 8705039
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 13, 20262026-06-13T03:15:20+00:00 2026-06-13T03:15:20+00:00

I have a pointer to a buffer of bytes from which I am copying

  • 0

I have a pointer to a buffer of bytes from which I am copying every even indexed bytes to an int(because of the protocol that the data is stored into buffer I know the odd cycles are for read).
Now when I do this

signed int a;
...
//inside a loop
a = buffer[2*i]; //buffer is unsigned

It gives me an unsigned number. However when I do this

a = (int8_t)buffer[2*i]

the number is presented in signed form. That is forcing me to rethink how sign extension in c work, especially in scenarios like above.
My understanding was since I am declaring a as signed, compiler will automatically do the sign extension. Can anybody take some time to explain why this is not the case. I just spent an hour in this trap and don’t want to fall in the same trap in future again.

  • 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-06-13T03:15:21+00:00Added an answer on June 13, 2026 at 3:15 am

    buffer is an array of unsigned eight-bit integers (or acts as one). So the value of buffer[2*i] is in the range from 0 to 255 (inclusive), and all values in that range are representable as ints, so assigning

    a = buffer[2*i];
    

    preserves the value, the promotion to the wider type int is done by padding with zeros.

    If you cast to int8_t before assigning,

    a = (int8_t)buffer[2*i]
    

    values in the buffer larger than 127 are converted in an implementation-defined way to type int8_t, most likely by just reinterpreting the bit-pattern as a signed 8-bit integer, which results in a negative value, from -128 to -1. These values are representable as ints, so they are preserved in the assignment, the value-preserving promotion to the wider type int is then done by sign-extension.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have an array of bytes that are actually 16-bit samples from a sound
I have function in C that reads byte by byte from a given buffer
I have a buffer of UYVY data from a camera and i am using
I have a pointer to a QScriptEngine that I'm passing through the overloaded class
I have a pointer to a map that I am trying to delete (this
I have a pointer of a structure type that I made. On program start
I have a pointer which points to a function. I would like to: if
Suppose I have some pointer, which I want to reinterpret as static dimension array
Let's say I have a pointer allocated to hold 4096 bytes. How would one
I have a TCP socket client receiving messages (data) from a server. messages are

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.