我下面這個教程在C使用的OpenAL ++:http://enigma-dev.org/forums/index.php?topic=730.0問題轉換字節序
正如您在本教程中看到,他們留下的一些方法未實現,和我有麻煩實施file_read_int32_le(字符*,FILE *)和file_read_int16_le(char *,FILE *)。顯然它應該做的是從文件中加載4個字節(或者在int16的情況下加2個,我猜...),將它從小端轉換爲大端,然後將其作爲無符號整數返回。下面的代碼:
static unsigned int file_read_int32_le(char* buffer, FILE* file) {
size_t bytesRead = fread(buffer, 1, 4, file);
printf("%x\n",(unsigned int)*buffer);
unsigned int* newBuffer = (unsigned int*)malloc(4);
*newBuffer = ((*buffer << 24) & 0xFF000000U) | ((*buffer << 8) & 0x00FF0000U) | ((*buffer >> 8) & 0x0000FF00U) | ((*buffer >> 24) & 0x000000FFU);
printf("%x\n", *newBuffer);
return (unsigned int)*newBuffer;
}
調試時(XCode中),它說的*緩衝區的十六進制值是0x72,這是隻有一個字節。當我使用malloc(4)創建newBuffer時,我得到一個4字節的緩衝區(* newBuffer就像0xC0000003),然後在操作之後變成0x72000000。我假設我正在尋找的結果是0x00000027(編輯:實際上是0x00000072),但我將如何實現這一目標?是否在char *緩衝區和unsigned int * newBuffer之間進行轉換?
實際上,該值將是0x00000072,不是0x00000027。基本上,它是交換字節順序,而不是nbble順序。 –
好喊。編輯。 – benwad
爲什麼該方法提供緩衝區和文件指針?這是不直觀的。 – trojanfoe