mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-04 05:09:53 +01:00
Considers endianness when printing raw memory into a string
This commit is contained in:
parent
878c257de7
commit
48153e8e10
@ -79,8 +79,21 @@ namespace Detail {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// For display purposes only.
|
struct Endianness {
|
||||||
// Does not consider endian-ness
|
enum Arch { Big, Little };
|
||||||
|
|
||||||
|
static Arch which() {
|
||||||
|
union {
|
||||||
|
int asInt;
|
||||||
|
char asChar[sizeof (int)];
|
||||||
|
};
|
||||||
|
|
||||||
|
asInt = 1;
|
||||||
|
return ( asChar[sizeof(int)-1] == 1 ) ? Big : Little;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Writes the raw memory into a string, considering endianness
|
||||||
template<typename T>
|
template<typename T>
|
||||||
std::string rawMemoryToString( T value ) {
|
std::string rawMemoryToString( T value ) {
|
||||||
union {
|
union {
|
||||||
@ -92,8 +105,14 @@ namespace Detail {
|
|||||||
|
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
oss << "0x";
|
oss << "0x";
|
||||||
for( unsigned char* cp = bytes; cp < bytes+sizeof(T); ++cp )
|
|
||||||
oss << std::hex << std::setw(2) << std::setfill('0') << (unsigned int)*cp;
|
int i = 0, end = sizeof(T), inc = 1;
|
||||||
|
if( Endianness::which() == Endianness::Little ) {
|
||||||
|
i = end-1;
|
||||||
|
end = inc = -1;
|
||||||
|
}
|
||||||
|
for( ; i != end; i += inc )
|
||||||
|
oss << std::hex << std::setw(2) << std::setfill('0') << (unsigned int)bytes[i];
|
||||||
return oss.str();
|
return oss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -339,3 +339,7 @@ TEST_CASE("not allowed", "[!throws]")
|
|||||||
// This test case should not be included if you run with -e on the command line
|
// This test case should not be included if you run with -e on the command line
|
||||||
SUCCEED();
|
SUCCEED();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TEST_CASE( "Is big endian" ) {
|
||||||
|
// CHECK( Catch::Detail::Endianness::which() == Catch::Detail::Endianness::Little );
|
||||||
|
//}
|
||||||
|
Loading…
Reference in New Issue
Block a user