online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code    Language
/****************************************************************************** Welcome to GDB Online. GDB online is an online compiler and debugger tool for C, C++, Python, PHP, Ruby, C#, OCaml, VB, Perl, Swift, Prolog, Javascript, Pascal, COBOL, HTML, CSS, JS Code, Compile, Run and Debug online from anywhere in world. *******************************************************************************/ #include <stdio.h> #include <stdint.h> #include <string.h> // for memset() #include "GetPutValuesByOffset.h" // Prototypes void HexDump (char *text, uint8_t *ptr, unsigned int size); // Functions int main() { uint8_t u8; uint16_t u16; uint32_t u32; float flt; double dbl; // Test 1 - get values from data bytes. uint8_t data[] = { 0x42, // 0: uint8_t 0x34, 0x12, // 1-2: uin16_t 0x44, 0x33, 0x22, 0x11, // 3-6: uint32_t 0x14, 0xae, 0x29, 0x42, // 7-10: float 42.42 0xf6, 0x28, 0x5c, 0x8f, 0xc2, 0x35, 0x45, 0x40 // 11-16: double 42.42 }; HexDump ("data ", data, sizeof(data)); u8 = getValueFrom (data, 0, 1).U8; u16 = getValueFrom (data, 1, 2).U16; u32 = getValueFrom (data, 3, 4).U32; flt = getValueFrom (data, 7, 4).FLT; dbl = getValueFrom (data, 11, 8).DBL; printf ("u8=0x%02x u16=0x%04x u32=0x%08x flt=%f dbl=%f\n", u8, u16, u32, flt, dbl); // Test 2 - put values in buffer. uint8_t buffer[17]; ValueUnion value; memset (buffer, 0x0, sizeof(buffer)); value.U8 = u8; putValueTo (buffer, 0, 1, value); value.U16 = u16; putValueTo (buffer, 1, 2, value); value.U32 = u32; putValueTo (buffer, 3, 4, value); value.FLT = flt; putValueTo (buffer, 7, 4, value); value.DBL = dbl; putValueTo (buffer, 11, 8, value); HexDump ("buffer", buffer, 19); // Test 3 - get values from data bytes using helper functions. u8 = getU8From (data, 0); u16 = getU16From (data, 1); u32 = getU32From (data, 3); flt = getFloatFrom (data, 7); dbl = getDoubleFrom (data, 11); printf ("u8=0x%02x u16=0x%04x u32=0x%08x flt=%f dbl=%f\n", u8, u16, u32, flt, dbl); // Test 4 - put values to buffer using helper functions. memset (buffer, 0x0, sizeof(buffer)); putU8To (buffer, 0, u8); putU16To (buffer, 1, u16); putU32To (buffer, 3, u32); putFloatTo (buffer, 7, flt); putDoubleTo (buffer, 11, dbl); HexDump ("buffer", buffer, 19); return 0; } // Utility Functions void HexDump (char *text, uint8_t *ptr, unsigned int size) { printf ("%s: ", text); for (int idx=0; idx<size; idx++) { printf ("%02x ", ((uint8_t*)ptr)[idx]); } printf ("\n"); }
#include <stdint.h> #include <string.h> // for memset(), memcpy() #include "GetPutValuesByOffset.h" ValueUnion getValueFrom(uint8_t *bufferPtr, unsigned int offset, unsigned int size) { ValueUnion result; memcpy(&result, bufferPtr + offset, size); return result; } void putValueTo(uint8_t *bufferPtr, unsigned int offset, unsigned int size, ValueUnion value) { memcpy(bufferPtr + offset, &value, size); } // getValue helper functions uint8_t getU8From (uint8_t *bufferPtr, unsigned int offset) { return getValueFrom(bufferPtr, offset, sizeof(uint8_t)).U8; } uint16_t getU16From (uint8_t *bufferPtr, unsigned int offset) { return getValueFrom(bufferPtr, offset, sizeof(uint16_t)).U16; } uint32_t getU32From (uint8_t *bufferPtr, unsigned int offset) { return getValueFrom(bufferPtr, offset, sizeof(uint32_t)).U32; } float getFloatFrom (uint8_t *bufferPtr, unsigned int offset) { return getValueFrom(bufferPtr, offset, sizeof(float)).FLT; } float getDoubleFrom (uint8_t *bufferPtr, unsigned int offset) { return getValueFrom(bufferPtr, offset, sizeof(double)).DBL; } // putValue helper functions void putU8To (uint8_t *bufferPtr, unsigned int offset, uint8_t value) { memcpy (bufferPtr + offset, &value, sizeof(value)); } void putU16To (uint8_t *bufferPtr, unsigned int offset, uint16_t value) { memcpy (bufferPtr + offset, &value, sizeof(value)); } void putU32To (uint8_t *bufferPtr, unsigned int offset, uint32_t value) { memcpy (bufferPtr + offset, &value, sizeof(value)); } void putFloatTo (uint8_t *bufferPtr, unsigned int offset, float value) { memcpy (bufferPtr + offset, &value, sizeof(value)); } void putDoubleTo (uint8_t *bufferPtr, unsigned int offset, double value) { memcpy (bufferPtr + offset, &value, sizeof(value)); }
#include <stdint.h> // Typedefs typedef union value_t { uint8_t U8; int8_t S8; uint16_t U16; int16_t S16; uint32_t U32; int32_t S32; float FLT; double DBL; } ValueUnion; // Prototypes ValueUnion getValueFrom(uint8_t *bufferPtr, unsigned int offset, unsigned int size); void putValueTo(uint8_t *bufferPtr, unsigned int offset, unsigned int size, ValueUnion value); uint8_t getU8From (uint8_t *bufferPtr, unsigned int offset); uint16_t getU16From (uint8_t *bufferPtr, unsigned int offset); uint32_t getU32From (uint8_t *bufferPtr, unsigned int offset); float getFloatFrom (uint8_t *bufferPtr, unsigned int offset); float getDoubleFrom (uint8_t *bufferPtr, unsigned int offset); void putU8To (uint8_t *bufferPtr, unsigned int offset, uint8_t value); void putU16To (uint8_t *bufferPtr, unsigned int offset, uint16_t value); void putU32To (uint8_t *bufferPtr, unsigned int offset, uint32_t value); void putFloatTo (uint8_t *bufferPtr, unsigned int offset, float value); void putDoubleTo (uint8_t *bufferPtr, unsigned int offset, double value);

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue