In C, if you want to convert a string into a number, you can use sprintf(), atoi() or a number of other utility functions. In C++, this can be achieved much more elegantly using std::stringstream objects. But what if you’re string represents a hexadecimal number? This is where stream manipulators come into play. By passing [...]
Posts Tagged ‘C’
Converting a hexadecimal string to a number in C++
Posted: 14th March 2011 by Tim in C++Tags: C, dec. string, decimal, hex, hexadecimal, iostream, manipulator, oct, octal, std, stl, stream, stringstream
C/C++ Gotcha – Conditional Evaluation
Posted: 28th December 2010 by Tim in C, C++Tags: C, condition, conditional, evaluation, gotcha, if, loop, programming, while
C and C++ code is generally pretty easy to make sense of. But there are a few oddities which can catch you out and can send you into an endless debugging exercise if you’re not careful. One such oddity is conditional evaluation. Consider the following code which keeps track of three numbers. Look through the [...]
C++ Gotcha – derived function default value
Posted: 13th December 2010 by Tim in C++Tags: argument, C, call, class, code, derived, functon, gotcha, inheritance, object, pointer, programming
C++ can be a strange language. Most of the time it’s easy to work with, but occasionally you’ll get errors which take forever to debug. Take a look at the following code and write down what you think the output will be. #include <iostream> class Base { public: virtual void test(int x = 0) { [...]
Reading from a file in C
Posted: 31st October 2010 by Tim in CTags: C, fgets, file, file handling, getline, input, program, read, string
Reading data from a file is fairly common. The stdio.h provides us with a function, getline, which allows us to read lines from a file without worrying about buffer overflows and other memory corruption issues that C is famous for. The following code opens a file named “myfile.txt” and prints out each line with the [...]
Reading from a file in C++
Posted: 27th September 2010 by Tim in C++Tags: C, config, file, fstream, ifstream, input, read, reading, string, txt
Reading data from a file is common in programming. C++ makes this process fairly painless with the ifstream class. When combined with the string class, you can avoid the memory and buffer overflow issues which you would have to deal with in C. The following example opens a file named “myfile.txt” and prints out each [...]
Namespace aliases in C++
Posted: 9th September 2010 by Tim in C++Tags: alias, C, coding, namespace, programming, style
In C++, it’s good practice to explicitly specify the namespace of a class instead of using the using syntax. This makes your code more readable, more explicit and is generally just good style. Sometimes these namespaces can get unconveniently long. This is where namespace aliases come in. Imagine you have a person class in the [...]
The difference between stack and heap memory allocation
Posted: 11th August 2010 by Tim in C, C++, Software DevelopmentTags: alloc, allocation, C, coding, free, heap, malloc, memory, stack, stack overflow
A common question amongst coders new to C or C++ relates to the difference between stack and heap memory allocation. The answer lies in how the code is executed at the very lowest level. When a program is executed, each thread is allocated a limited amount of stack space. The stack holds information used by [...]
Checking if a float is not a number (nan) in C / C++
Posted: 10th March 2010 by Tim in C, C++Tags: C, divide by zero, double, float, fraction, math, nan, not a number, zero
Occasionally you need to check whether a float is a valid number. There are times, such as when the number is read in to a function as an argument, when you can’t assume that the check has already been done. This check can be done using the isnan(number) function from math.h. For example: #include <math.h> [...]
PQexecParams example – PostgreSQL query execution with parameters
Posted: 19th November 2009 by Tim in C, PostgreSQLTags: C, coding, exec, parameter, PostgreSQL, programming, query
The PostgreSQL documentation states that PQexecParams can be called like so: PGresult *PQexecParams(PGconn *conn, const char *command, int nParams, const Oid *paramTypes, const char * const *paramValues, const int *paramLengths, const int *paramFormats, int resultFormat); There are two parts of this call which can be tricky to novice C and/or PostgreSQL users and aren’t explained [...]
Millisecond timer in C / C++
Posted: 18th October 2009 by Tim in C, C++Tags: C, code, coding, header, include, program, programming, time, timer
If you’re looking for a timer with fairly good accuracy in C or C++, you can use the functions in time.h and sys/time.h to build a millisecond timer. This is useful for things like evaluating the execution time of a program, roughly accurate to the nearest microsecond. double get_time_ms() { struct timeval t; gettimeofday(&t, NULL); [...]
Converting latitude and longitude into mercator (UTM) X and Y coordinates
Posted: 6th October 2009 by Tim in C, C++Tags: C, degrees, global, lat, latitude, lon, longitude, mercator, pi, position, utm
The following calculations have been sourced from the Navit Project source code, released under the GNU General Public License version 2. To convert latitude and longitude into UTM X and Y coordinates, we can simply perform two calculations (lat is latitude and lon is longitude): x = lon × 6371000.0 × pi รท 180 y [...]
Nanosleep in C / C++
Posted: 29th September 2009 by Tim in C, C++Tags: C, call, coding, development, nanosleep, programming, sleep, software engineering, usleep
usleep is not a very accurate form of sleep in C / C++. From the man page: The sleep may be lengthened slightly by any system activity or by the time spent processing the call or by the granularity of system timers. nanosleep, on the other hand, is much more accurate. The following code will [...]
Connecting to MySQL in C
Posted: 20th August 2009 by Tim in C, MySQL, UbuntuTags: C, coding, compile, connectivity, database, development, gcc, MySQL, sockets, sql, Ubuntu
MySQL comes with a library to make talking to MySQL with C easyish. There are a few things you have to install first, though. I’m using Ubuntu 8.04 for this walkthrough, but things should be similar for other flavours of Linux. Before we start, we have to download the development files required: sudo apt-get install [...]
Baud rate and other serial comm settings in C
Posted: 4th August 2009 by Tim in CTags: baud, C, coding, comms, communication, networking, programming, rate, serial, settings
Communicating through a serial port in C is pretty simple once it’s set up; you just read and write to it as though it was a file. The setting up, however, can be a real pain. Here’s the short and simple way to get it done. Note that this code requires the following headers: #include [...]
Calling object functions in C++ with pthreads
Posted: 13th July 2009 by Tim in C++Tags: C, call, class, coding, function, programming, pthreads, Software Development, software engineering
For various reasons, you cannot create a pthread on an object’s function. There is, however, a few ways to get around that. One of the most flexible ways of doing this is to create a wrapper function to call an object’s method, taking a pointer to the object as an argument. For example, if you [...]
Adding images to OpenGL in C
Posted: 7th July 2009 by Tim in OpenGLTags: bmp, C, coding, fig, image, jpeg, jpg, load, OpenGL, raw, Software Development, software engineering, texture, tif
Adding an image to a 2D OpenGL screen may seem like a relatively simple task, but it’s not. OpenGL is a rendering language, and as such has no native support for loading JPEG, GIF, TIF, BMP or any other popular image type. If, like me, you’re looking for a quick and simple way to get [...]