相关疑难解决方法(0)

Python嗅探黑帽Python书籍

import socket
import os
import struct
import sys
from ctypes import *

# host to listen on
host   = sys.argv[1]

class IP(Structure):

    _fields_ = [
        ("ihl",           c_ubyte, 4),
        ("version",       c_ubyte, 4),
        ("tos",           c_ubyte),
        ("len",           c_ushort),
        ("id",            c_ushort),
        ("offset",        c_ushort),
        ("ttl",           c_ubyte),
        ("protocol_num",  c_ubyte),
        ("sum",           c_ushort),
        ("src",           c_ulong),
        ("dst",           c_ulong)
    ]

    def __new__(self, socket_buffer=None):
        return self.from_buffer_copy(socket_buffer)    

    def __init__(self, socket_buffer=None):

        # map protocol constants to their names
        self.protocol_map = {1:"ICMP", 6:"TCP", 17:"UDP"}

        # human readable IP addresses
        self.src_address = socket.inet_ntoa(struct.pack("<L",self.src))
        self.dst_address = …
Run Code Online (Sandbox Code Playgroud)

python sockets linux networking

13
推荐指数
2
解决办法
3984
查看次数

将int转换为指针 - 为什么要先转换为long?(如在p =(void*)42;)

GLib文档中,有一章关于类型转换宏.在关于转换int*void指针的讨论中,它说(强调我的):

天真的,你可以试试这个,但这是不正确的:

gpointer p;
int i;
p = (void*) 42;
i = (int) p;
Run Code Online (Sandbox Code Playgroud)

同样,该示例不正确,请勿复制.问题是在某些系统上你需要这样做:

gpointer p;
int i;
p = (void*) (long) 42;
i = (int) (long) p;
Run Code Online (Sandbox Code Playgroud)

(来源:GLib参考手册GLib 2.39.92,章节类型转换宏).

为什么演员long必要?

是否需要加宽int不作为指针演员的一部分自动发生?

c int pointers casting long-integer

12
推荐指数
5
解决办法
3万
查看次数

为什么"long int"与"int"具有相同的大小?这个修饰符是否有效?

嗯..我很喜欢这样的修饰符,如/扩展/减少创建变量时分配的内存量,但是......

#include <stdio.h>

#define test_int int
#define long_int long int
#define long_long_int long long int

void main()
{
    printf("%i\n", sizeof (test_int)); //output 4
    printf("%i\n", sizeof (long_int)); //output 4. Why? wasn't I modified it's size?
    printf("%i\n", sizeof (long_long_int)); //output 8
}
Run Code Online (Sandbox Code Playgroud)

由于未知原因,它将intlong int的大小打印为相同.我使用的是vc ++ 2010 express版.对不起,很难在谷歌找到答案,它总是显示int作为单独的类型.

c c++ int modifier

10
推荐指数
2
解决办法
7006
查看次数

long double vs long int

我正在做一个计算彩票概率的程序.规格选择47个中的5个数字和27个中的1个

所以我做了以下事情:

#include <iostream>

long int choose(unsigned n, unsigned k);
long int factorial(unsigned n);

int main(){
    using namespace std;
    long int regularProb, megaProb;
    regularProb = choose(47, 5);
    megaProb = choose(27, 1);
    cout << "The probability of the correct number is 1 out of " << (regularProb * megaProb) << endl;

    return 0;
}

long int choose(unsigned n, unsigned k){    
    return factorial(n) / (factorial(k) * factorial(n-k));
}

long int factorial(unsigned n){
    long int result = 1;
    for (int i=2;i<=n;i++) result *= …
Run Code Online (Sandbox Code Playgroud)

c++

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

在64位系统上Python是ctypes.c_long 64位吗?

在C中,64位系统上的long为64位.这是否反映在Python的ctypes模块中?

python 64-bit ctypes

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

Linux和Windows上的Python sys.maxint,sys.maxunicode

在64位Debian Linux 6上:

Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.maxint
9223372036854775807
>>> sys.maxunicode
1114111
Run Code Online (Sandbox Code Playgroud)

在64位Windows 7上:

Python 2.7.1 (r271:86832, Nov 27 2010, 17:19:03) [MSC v.1500 64 bit (AMD64)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.maxint
2147483647
>>> sys.maxunicode
65535
Run Code Online (Sandbox Code Playgroud)

两种操作系统都是64位.根据维基百科,他们有sys.maxunicode 在unicode中有1,114,112个代码点.Windows上的sys.maxunicode是错误的吗?

为什么他们有不同的sys.maxint?

python linux windows unicode

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

在64位机器中,长期和长期在C中有相同的范围吗?

我在/usr/include/limits.h中看到了

/* Minimum and maximum values a `signed long int' can hold.  */
if __WORDSIZE == 64
 define LONG_MAX     9223372036854775807L
else
 define LONG_MAX     2147483647L
endif
define LONG_MIN      (-LONG_MAX - 1L)
/* Maximum value an `unsigned long int' can hold.  (Minimum is 0.)  */
if __WORDSIZE == 64
 define ULONG_MAX    18446744073709551615UL
else
 define ULONG_MAX    4294967295UL
endif
ifdef __USE_ISOC99

/* Minimum and maximum values a `signed long long int' can hold.  */
define LLONG_MAX    9223372036854775807LL
define LLONG_MIN    (-LLONG_MAX - 1LL)

/* Maximum …
Run Code Online (Sandbox Code Playgroud)

c linux

5
推荐指数
2
解决办法
1164
查看次数

CArray MFC 序列化多平台,16、32 和 64 位

我正在处理非常旧的遗留代码,并将其从 32 位移植到 64 位。

我遇到的困难之一是 MFC 序列化。32 位和 64 位之间的区别之一是指针数据的大小。CArray这意味着,例如,如果由于某种原因我序列化了类似的大小

ar << m_array.GetSize();
Run Code Online (Sandbox Code Playgroud)

32 和 64 平台之间的数据不同,因为GetSize返回INT_PTR. 为了使序列化数据与以 32 位和 64 位编译的同一应用程序完全兼容,我在存储阶段强制使用数据类型,在读取时也强制使用相同的数据类型。(非常确定 32 位足以满足此数据)

店铺

ar << (int)m_array.GetSize();
Run Code Online (Sandbox Code Playgroud)

阅读

int iNumSize = 0;
ar >> iNumSize ;
Run Code Online (Sandbox Code Playgroud)

换句话说,应用程序无论是以 32 位还是 64 位编译,都可以像 as 一样序列化这些数据int

现在我对类型的序列化有一个疑问CArrayCArray使用内置的CArchive序列化来序列化代码

//defined as CArray m_arrayVertex; on .h
m_arrayVertex.Serialize(ar);
Run Code Online (Sandbox Code Playgroud)

这是使用此模板Serialize在 MFC 文件中定义的afxtemp.h

template<class TYPE, class ARG_TYPE>
void CArray<TYPE, ARG_TYPE>::Serialize(CArchive& …
Run Code Online (Sandbox Code Playgroud)

windows winapi serialization mfc 32bit-64bit

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

long long可能不存储整数?

在我的任务中,它说"不要添加长int或长长的私有成员来完成这个,因为不能保证任何一个实际上可以存储比int更大的数字." 我知道int的最大值为2 ^ 31-1,long long的最大值为2 ^ 63-1.有人能给我一个例子,为什么给定的句子是真的?

提前致谢!

c++

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

numpy中连续整数的总和不正确

100,000,000使用以下方法对第一个正整数求和:

import numpy as np
np.arange(1,100000001).sum()
Run Code Online (Sandbox Code Playgroud)

我返回:987459712,它与公式不匹配:N(N+1)/2for N=100000000。即,公式返回5000000050000000

在发布之前,我写了以下内容,返回True

np.arange(1,65536).sum() == ((65535+1) * 65535)/2
Run Code Online (Sandbox Code Playgroud)

然而,这个数字65536似乎是一个关键点,因为

np.arange(1,65537).sum() == ((65536+1) * 65536)/2
Run Code Online (Sandbox Code Playgroud)

返回False

对于大于65536代码的False整数返回,而低于此阈值的整数返回True

有人可以解释我在计算总和时做错了什么,或者代码发生了什么?

python numpy sum python-3.x

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

是 sizeof(long) == sizeof(void*) 吗?

C 能保证sizeof(long) == sizeof(void*)吗?如果不是,为什么它在 Linux 内核源代码中使用得如此广泛?

我看了sizeof(int)==sizeof(void*)?但那是关于sizeof(int)vs 的sizeof(void *)

c linux-kernel

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