在这种情况下使用uint64_t是不好的做法吗?

时间:2016-11-17 11:37:49

标签: c sockets types cross-platform

我最近一直在玩C套接字,我设法在客户端和服务器之间交换文件。然而,我偶然发现了这个问题:当我的mac(64位)和覆盆子pi(32位)之间发送文件大小时,它失败,因为size_t在两者之间是不同的。我通过切换到uint64_t来解决。

  • 我想知道,使用它代替size_t这是一个不好的做法,uint64_t在fread(),fwrite(),read(),write()的所有原型中定义, stat.size?
  • 树莓派上 <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>jQuery UI Droppable - Default functionality</title> <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> <link rel="stylesheet" href="/resources/demos/style.css"> <style> #chair { width: 11px; height: 11px; padding: 0.5em; float: left; margin: 10px; background-color: red; } #cells { width: 11px; height: 11px; padding: 0.5em; float: left; margin: 10px; background-color: green; } #table { width: 50%; float: left; } #chairs{width: 50%; float: right;} .dragged { width: 5px; height: 5px; padding: 0.5em; float: left; margin: 10px; background-color: blue ; } </style> <script src="https://code.jquery.com/jquery-1.12.4.js"></script> <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> </head> <body> <div id = "table"></div> <div id = "chairs"></div> generate cells : <input type="button" value="generate" onclick='generateZone();'></input> generate chair : <input type="button" value="chair" onclick='generateChairs();'></input> <script type="text/javascript"> function generateZone(){ var theader = '<table>\n'; var tbody = ""; for(i= 0; i < 5; i++){ tbody += '<tr>'; for (j = 0; j< 5; j++){ tbody += '<td id = "cells" class = "freeCell" >'; tbody += i + ',' + j; tbody += '</td>'; } tbody += '</tr>\n'; } var tfooter = '</table>'; document.getElementById("table").innerHTML = theader + tbody + tfooter; $( "#table #cells" ).droppable({ drop : function(event, ui){ $(this) .addClss("dragged") .find("#chair"); } }); } </script> <script type="text/javascript"> function generateChairs(){ var header = '<table>\n'; var body = ""; for(n= 0; n < 5; n++){ body += '<tr>'; for (m = 0; m< 5; m++){ body += '<td id = "chair" class = "AvailableCell" >'; body += n + ',' + m; body += '</td>'; } body += '</tr>\n'; } var footer = '</table>'; document.getElementById("chairs").innerHTML = header + body + footer; $( "#chairs #chair" ).draggable(); } </script> </body> </html> 会变慢吗?

1 个答案:

答案 0 :(得分:3)

这不仅是良好的做法,而且最终是必要的。您无法在不同体系结构的不同计算机之间交换数据,也无法定义数据的格式和大小,并提供可移植的方式来解释它。这些固定宽度类型是为此目的而设计的。

在32位平台上使用uint64_t而不是uint32_t会更慢吗?可能是。值得注意的?怀疑。但你可以测量它并找出答案。

也不要忘记account for differences in endianness