我必须从文件中读取10个字节,最后4个字节是无符号整数。但我有一个11字节长的字符数组/指针。如何将最后4个字节(末尾没有零终止字符)转换为无符号整数?
//pesudo code
char *p = readBytesFromFile();
unsigned int myInt = 0;
for( int i = 6; i < 10; i++ )
myInt += (int)p[i];
这是对的吗?对我来说似乎不正确。
答案 0 :(得分:2)
我同意之前的回答,但只是想补充一点,如果文件是使用不同的字节顺序创建的,则此解决方案可能无法100%工作。
我不想让您混淆额外的信息,但请记住,当您直接从文件中投射时,字节顺序可能会导致您的问题。
这是关于字节序的教程:http://www.codeproject.com/Articles/4804/Basic-concepts-on-Endianness
答案 1 :(得分:2)
以下代码可能有效:
myInt = *(reinterpret_cast<unsigned int*>(p + 6));
当且仅当:
sizeof(int) == 4
,不保证无处不在如果没有,正如Dietmar建议的那样,你应该循环数据(根据字节顺序转发或反向)并执行类似
的操作myInt = myInt << 8 | static_cast<unsigned char>(p[i])
这是对齐安全的(它应该在每个系统上)。仍然要注意第1点和第3点。
答案 2 :(得分:1)
尝试myInt = *(reinterpret_cast<unsigned int*>(p + 6));
。
这将获取第6个字符的地址,重新解释为指向unsigned int的指针,然后返回它指向的(unsigned int)值。
答案 3 :(得分:0)
也许使用联合是一种选择?我认为这可能有效; 更新:是的,它有效。
$(".expiry").each(function () {
var expiry = $(this).text();
var x = setInterval(function () {
var now = new Date().getTime();
var distance = expiry - now;
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
$(this).closest("div").find(".countdown").html(days + "d " + hours + "h " + minutes + "m " + seconds + "s ");
}, 1000);
});