小编cpa*_*tor的帖子

将float浮动到int,32位C的区别

我目前正在使用需要运行32位系统的旧代码.在这项工作中,我偶然发现了一个问题(出于学术兴趣),我想了解其原因.

如果对变量或表达式进行强制转换,似乎在32位C中从float转换为int的行为会有所不同.考虑该计划:

#include <stdio.h>
int main() {
   int i,c1,c2;
   float f1,f10;
   for (i=0; i< 21; i++)  {
      f1 = 3+i*0.1;
      f10 = f1*10.0;
      c1 = (int)f10;
      c2 = (int)(f1*10.0);
      printf("%d, %d, %d, %11.9f, %11.9f\n",c1,c2,c1-c2,f10,f1*10.0);
   }
}
Run Code Online (Sandbox Code Playgroud)

使用-m32修饰符直接在32位系统或64位系统上编译(使用gcc),程序的输出为:

30, 30, 0, 30.000000000 30.000000000
31, 30, 1, 31.000000000 30.999999046
32, 32, 0, 32.000000000 32.000000477
33, 32, 1, 33.000000000 32.999999523
34, 34, 0, 34.000000000 34.000000954
35, 35, 0, 35.000000000 35.000000000
36, 35, 1, 36.000000000 35.999999046
37, 37, 0, 37.000000000 37.000000477
38, …
Run Code Online (Sandbox Code Playgroud)

c casting 32-bit

11
推荐指数
2
解决办法
813
查看次数

正确使用getsockopt和setsockopt用于SO_RCVTIMEO和SO_SNDTIMEO

由于各种原因,我想在读取和写入服务器中的套接字时实现超时但无法使其运行,因此请求了解问题可能存在的地方.

为了设置读取和写入套接字的超时,我正在尝试使用函数setsocketopt()getsocketopt().但是我必须做错了,因为返回值表明发生了问题并且perror输出"Invalid argument".奇怪的是错误并不总是发生在第一次使用setsocketopt()getsocketopt(),这令我费解位.

以下服务器和客户端代码重现我的问题(使用gcc编译)

服务器代码:

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h>  

int main() {
   struct sockaddr_in saddr,caddr; 
   socklen_t clen;
   int sock, csock, reuse = 1, ret=0;
   socklen_t ntrcv, ntsnd;
   struct timeval tout, tsnd, trcv;

   // create a new stream socket
   if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) perror("failed to create socket");
   else {          
      // enable the socket to reuse the address
      if (setsockopt(sock, …
Run Code Online (Sandbox Code Playgroud)

c sockets timeout setsockopt

4
推荐指数
1
解决办法
2万
查看次数

何时使用 L.TileLayer 与 L.tileLayer

我刚刚使用 Leaflet 为网站构建地图,并注意到要添加图块图层,至少可以使用两种方法L.TileLayer()L.tileLayer(),它们的名称仅在单个字符的大小写上有所不同。

然而,虽然这两个方法返回的对象都可以添加到由L.map()返回的对象返回的地图对象中,但返回的对象L.TileLayer()似乎没有该addTo()方法,而返回的对象似乎没有该方法L.tileLayer()。例如两者

var map = L.map('map');
var tiles = new L.TileLayer(<tileUrl>, {attribution: <tileAttrib>});
map.addLayer(tiles);
Run Code Online (Sandbox Code Playgroud)

var map = L.map('map');
var tiles = new L.tileLayer(<tileUrl>, {attribution: <tileAttrib>});
map.addLayer(tiles);
Run Code Online (Sandbox Code Playgroud)

var map = L.map('map');
L.tileLayer(<tileUrl>, {attribution: <tileAttrib>}).addTo(map);
Run Code Online (Sandbox Code Playgroud)

同时

var map = L.map('map');
L.TileLayer(<tileUrl>, {attribution: <tileAttrib>}).addTo(map);
Run Code Online (Sandbox Code Playgroud)

失败。浏览Leaflet的文档,似乎正确的使用方法是,L.tileLayer()那么问题是有什么用L.TileLayer()

这是到目前为止我的代码的完整示例,要尝试不同的替代方案,只需取消注释要测试的代码并确保其他替代方案得到注释

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-transitional.dtd">
        
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
      <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/> …
Run Code Online (Sandbox Code Playgroud)

javascript leaflet

3
推荐指数
1
解决办法
2247
查看次数

标签 统计

c ×2

32-bit ×1

casting ×1

javascript ×1

leaflet ×1

setsockopt ×1

sockets ×1

timeout ×1