小编use*_*165的帖子

将IP地址从sockaddr转换为in_addr

我需要将结构中放置的套接字地址转换sockaddr为结构in_addr.我试图了解IP如何存储在这些结构中:

struct sockaddr {
        u_short sa_family;              /* address family */
        char    sa_data[14];            /* up to 14 bytes of direct address */
};


struct in_addr {
        union {
                struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
                struct { u_short s_w1,s_w2; } S_un_w;
                u_long S_addr;
        } S_un;
Run Code Online (Sandbox Code Playgroud)

我被问到如何127.0.0.1存储在14个字符中的问题sa_data.将sockaddr转换为in_addr的最佳方法是什么?

c++ sockets visual-c++

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

shell脚本,在并行进程中运行

#!/bin/ksh
##########################################################################
$JAVA_HOME/bin/java -jar SocketListener.jar 8182

run_something_else

exit 0
Run Code Online (Sandbox Code Playgroud)

SocketListener启动,shell正在等待,而SocketListener不会死.

如何同时运行run_something_else和SocketListener

bash shell

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

Golang将数组传递给函数并对其进行修改

在大多数语言(如c ++)中,传递数组会导致通过引用隐式传递它,因此对函数中传递的数组进行的任何更改都将导致更改原始数组。我正在学习Golang,在Alan AA Donovan和Brian W. Kernighan撰写的“ Go编程语言”一书中,它的行为不同于其他语言-不会隐式地通过引用传递数组。

这让我有些困惑-这是否意味着在没有引用的情况下传递数组不应该修改数组本身?让我说明一下:

func main() {
    tab := []int{1, 2, 3}
    fmt.Println(tab)
    // Results in [1 2 3]
    reverse(tab)
    fmt.Println(tab)
    // Results in [3 2 1]
}

func reverse(tab []int) {
    for i, j := 0, len(tab)-1; i < j; i, j = i+1, j-1 {
        tab[i], tab[j] = tab[j], tab[i]
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,数组不是由引用传递的,但是反向函数会修改原始数组,因此它的工作方式有点像C ++程序那样。谁能解释我的区别?

PS:很抱歉,如果这是一个假的问题,我对Golang完全陌生,并且试图很好地理解基本知识。

c++ arrays reference go

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

获取Ranges之间的日期,c#

我有两个约会

  1. 2011年1月21日[来自日期]
  2. 25/01/2011 [至今]

如何使用c#获取这些范围之间的所有日期

答案应该是

21/01/2011
22/01/2011
23/01/2011
24/01/2011
25/01/2011

c# asp.net

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

什么时候违反单一责任原则?

您如何决定何时以及如何违反单一责任原则

例如,假设我有一个具有以下接口的网络摄像机(为了简单起见,接口保持愚蠢和“错误”):

class Camera
{
  string user();
  void set_user(string user);

  string password();
  void set_password(string password);

  string url();
  void set_url(string url);

  image take_snapshot();

  bool reboot();
}
Run Code Online (Sandbox Code Playgroud)

这看起来很自然,但看起来 Camera 类有 3 个职责:存储元数据、拍摄快照、重新启动。按照SRP,你可以这样写:

class Camera
{
  string user();
  void set_user(string user);

  string password();
  void set_password(string password);

  string url();
  void set_url(string url);
}

image take_snapshot(camera c);
bool reboot_camera(camera c);
Run Code Online (Sandbox Code Playgroud)

这里的东西在职责方面被整齐地分开,但现在它看起来非常像具有愚蠢结构和函数的 C...这引出了一个问题:为什么我们首先需要 OOP。

您如何在便利性和建议零售价之间取得平衡?

[编辑]

@stjin 的想法被@John Zwinck 显示为答案

c++ coding-style single-responsibility-principle design-principles

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

可以使用或不提供连续检查网络连接

我已经在我的项目中实现了可达性,在执行任何网络连接任务时,在某个特定时间检查连接是否可达.但我想要的是连续检查网络是否可以显示通知但如何实现它我不知道所以请帮助

reachability ios ios7

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

函数未收到值

因此,我正在尝试制作一个程序,该程序需要一些输入秒的随机数,并将其转换为Days,Hours,Minutes和Seconds.我不得不使用符号常量来定义一天中的小时数,一小时内的分钟数和一分钟内的秒数.我通过了价值,但它没有被收到,所以我最终得到了一些巨大的负数.这是代码.如果有人能告诉我问题所在,我会感激不尽.

我在函数定义代码中使用了随机位代码来观察是否收到了总秒数,而不是它.

#ifndef SECONDS_H_
#define SECONDS_H_

#define HOURS_IN_DAY 24
#define MINUTES_IN_HOUR 60
#define SECONDS_IN_MINUTES 60

#include <iostream>

using namespace std;

class Seconds
{
private:
    long totalSeconds;
public:
    Seconds();
    ~Seconds(){};
    Seconds(int totalSeconds);
    void Seconds::convertSeconds(int &days, int &hours, int &minutes, int &seconds);
};

#endif
Run Code Online (Sandbox Code Playgroud)

...

#include <conio.h>
#include <string>
#include <iostream>
#include "seconds.h"

#define HOURS_IN_DAY 24
#define MINUTES_IN_HOUR 60
#define SECONDS_IN_MINUTE 60

Seconds::Seconds(int totalSeconds)
{
    totalSeconds = totalSeconds;
}

void Seconds::convertSeconds(int &days, int &hours, int &minutes, int &seconds)
{   
    cout << endl; …
Run Code Online (Sandbox Code Playgroud)

c++ function

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

Qt无法将QGraphicsView信号的子类(未继承)连接到SLOT

我定义了类MyGraphicsView,它是QGraphicsView的子类.然后,我在MyGraphicsView中添加了一个信号test().在我的MainWindow类中,我有MyGraphicsView*myView,我连接如下:

connect(myView,SIGNAL(test()),this,SLOT(zoom()));

但我得到了:

    QObject::connect: No such signal QGraphicsView::test() in ..\Proto_version_2\mainwindow.cpp:73
Run Code Online (Sandbox Code Playgroud)

qt signals-slots qgraphicsview

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

Python:距离直线最近的点

我有以下问题。我有一个装满坐标和三个点的盒子,它们构成了一条线。现在我想计算所有框坐标到该线的最短距离。我有三种方法可以做到这一点,vtk 和 numpy 版本总是有相同的结果,但不是 shapely 的距离方法。但我需要匀称的版本,因为我想测量从一个点到整条线而不是到单独的线段的最近距离。这是迄今为止的示例代码。所以问题是“pdist”:

from shapely.geometry import LineString, Point
import vtk, numpy as np
import itertools

import math

from numpy.linalg import norm

x1=np.arange(4,21)
y1=np.arange(4,21)
z1=np.arange(-7,6)

linepoints = np.array([[1,10,0],[10,10,0],[15,15,0]])


for i in itertools.product(x1,y1,z1):
    
    for m in range(len(linepoints)-1):
        
        line3 = LineString([linepoints[m],linepoints[m+1]])
        
        p = Point(i)
        
        d = norm(np.cross(linepoints[m]-linepoints[m+1], linepoints[m]-i))/norm(linepoints[m+1]-linepoints[m])
        
        dist=math.sqrt(vtk.vtkLine().DistanceToLine(i,linepoints[m],linepoints[m+1]))
        
        pdist = p.distance(line3)
        
        print(d,dist,pdist)
Run Code Online (Sandbox Code Playgroud)

python numpy scipy shapely

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

为什么std :: ends导致字符串比较失败?

我昨天花了大约4个小时试图在我的代码中解决这个问题.我将问题简化为下面的示例.

我们的想法是将字符串存储在以std :: ends结尾的字符串流中,然后将其检索并将其与原始字符串进行比较.

#include <sstream>
#include <iostream>
#include <string>

int main( int argc, char** argv )
{
    const std::string HELLO( "hello" );

    std::stringstream testStream;

    testStream << HELLO << std::ends;

    std::string hi = testStream.str();

    if( HELLO == hi )
    {
        std::cout << HELLO << "==" << hi << std::endl;
    }

    return 0;
}

正如您可能猜到的,上面的代码在执行时不会打印出任何内容.

虽然,如果打印出来,或者在调试器(VS2005)中查看,HELLO和hi看起来相同,它们的.length()实际上相差1.这就是我猜测导致"=="运算符失败的原因.

我的问题是为什么.我不明白为什么std :: ends是一个不可见的字符添加到字符串hi,使hi和HELLO的长度不同,即使它们具有相同的内容.此外,这个看不见的角色不会被增强修剪修剪.但是,如果使用strcmp比较两个字符串的.c_str(),则比较正常.

我首先使用std :: ends的原因是因为我在过去遇到了一些问题,因为stringstream在流的末尾保留了垃圾数据.std :: ends为我解决了这个问题.

c++ boost stl

0
推荐指数
1
解决办法
2218
查看次数