cgccmingw

Imitate/emulate a big-endian behavior in C?


I was wondering if it's possible to emulate a big-endian behavior, for testing purpose?

via either windows or linux , mingw or gcc. Here's a sample of code which I would like the emulation to return big endian:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <limits.h>
#if CHAR_BIT != 8
#error "Unsupported char size for detecting endianness"
#endif

int main (void)
{
  short int word = 0x0001;
  char *byte = (char *) &word;
  if (byte[0]) printf("little endian");
  else printf("big endian");
  return 0;
}

Solution

  • You can't switch endianes for testing purposes or anything like that. What you can do is, to install an emulator for a big-endian architecture and compile your program for the emulator. Here's one way, under:

    http://people.debian.org/~aurel32/qemu/

    are Debian disk images for all kinds of QEMU supported architectures. mips, sparc and arm are big-endian (do not download anything ending with -el). I'm using Debian Lenny for MIPS ( http://people.debian.org/~aurel32/qemu/mips/ ). Install QEMU for your platform, then follow the instructions on the MIPS-page to download a image and kernel file.

    Now you can boot into a Debian 5 for MIPS right from your console. Login to you virtual machine, become super user (the password is "root") and install the C-compiler:

    debian-mips:~# su -
    debian-mips:~# apt-get update
    debian-mips:~# apt-get install gcc
    

    fire up an editor and enter your program:

    debian-mips:~# pico foo.c
    debian-mips:~# gcc foo.c
    debian-mips:~# ./a.out
    big endian
    

    UPDATE (2021-07-27) Just want to add, for anyone reading this 11 years later, that using the multiarch privileged container in docker is an easier and faster way to get a testing setup. Getting a s390x (big endian) running is as easy as:

    $ docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    $ docker run --rm -it s390x/ubuntu bash
    

    Also, this works under Docker Desktop for Windows.

    See https://github.com/multiarch/qemu-user-static for more infos.