小编Jim*_*hen的帖子

在指定的UDP端口上接收组播数据包的小程序?

我想调试一些多播问题,我希望有一些小程序/实用程序来显示传入的多播数据包.

从发送机器(A),我使用Richard Stevens的sock程序(随TCP/IP Illustrated书Vol1提供)发送多播数据包(源端口= dest端口= 7000),如下所示:

sock -u -b 7000 224.0.0.7 7000
Run Code Online (Sandbox Code Playgroud)

在接收机器(B)上,我可以使用Wireshark捕获已发送的数据包,但是,sock在B上运行的相同命令不报告接收任何内容.

然后,我应该在B上使用什么程序来查看传入的多播数据包,除了Wireshark是否过度.

Linux和Windows程序都是受欢迎的.

在此输入图像描述

multicast

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

更简洁的方法将值附加到dict数组元素?

当我想在Key下将一个newvalue附加到Dict时,我发现自己必须写:

# Dict={}
# Key = ....
# newvalue = ....

if not Key in Dict:
    Dict[Key] = [ newvalue ]
else:
    Dict[Key].append(newvalue)
Run Code Online (Sandbox Code Playgroud)

它需要四行代码.有没有更简洁的方式与python标准库?例如

Dict.appendkeyvalue(Key, newvalue)
Run Code Online (Sandbox Code Playgroud)

python

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

将指针转换为64位整数,为什么在32位和64位平台上的结果不同

我有一个像这样的代码片段(up.cpp):

#include <stdio.h>

typedef unsigned long long Uint64;
int main()
{
    void *p = (void*)0xC0001234;
    Uint64 u64 = (Uint64)p;
    printf("{%llx}\n", u64);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用32位gcc 4.8.1编译它,我得到输出:

{ffffffffc0001234}
Run Code Online (Sandbox Code Playgroud)

使用64位gcc 4.8.1编译它,我得到输出:

{c0001234}
Run Code Online (Sandbox Code Playgroud)

是的,64位的值为32位.gcc 4.8.1来自openSUSE 13.1.

我也试过它的Visual C++ 2010和x86的64位编译器(有点代码变化,__int64和%I64x),以及令人惊讶的得到相同的结果.

当然,我打算{c0001234}同时使用x86和x64.但为什么会有这样的差异呢?

c

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

如何从cmd行创建-D值成为字符串?

我面临一个棘手的问题.我想根据编译器命令行伪造一个C源文件内容.例如(使用VC):

如果我使用命令行

cl -c -E -Dfoo=rice test.c
Run Code Online (Sandbox Code Playgroud)

我希望得到实际的 C内容(在预处理之后):

char *s = "rice";
Run Code Online (Sandbox Code Playgroud)

如果我使用命令行

cl -c -E -Dfoo=ball test.c
Run Code Online (Sandbox Code Playgroud)

我希望得到实际的C源文件内容:

char *s = "ball";
Run Code Online (Sandbox Code Playgroud)

现在找到解决方案......

第一次尝试:

// test.c
#define STRNAME(n) #n
char *s = STRNAME(foo);
Run Code Online (Sandbox Code Playgroud)

- 没运气.无论foo被定义为命令行,我总是得到

char *s = "foo"; // Oh no!
Run Code Online (Sandbox Code Playgroud)

第二次尝试(最接近我可以拍照,但仍然很详细):

// test.c
#define STRNAME(n) #n
char *s = foo;
Run Code Online (Sandbox Code Playgroud)

这次,我必须详细更改命令行:

cl -c -E -Dfoo=STRNAME(rice) test.c
Run Code Online (Sandbox Code Playgroud)

现在我明白了

 char *s = "rice";
Run Code Online (Sandbox Code Playgroud)

有没有办法帮助我摆脱这种冗长?

顺便说一句:我真的不喜欢在命令参数中引入引号(让它们成为其中的一部分argv[x],因为你无法在Windows CMD和Linux Bash上可靠且可移植地编写这样的命令行 - 我想.

c stringification c-preprocessor

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

在所选文本之前插入元素

我想在网页上实现这样一个功能:当被调用时,它会检查页面上是否有一些文本选择(通常显示为反色文本),如果是,则插入一个元素 <img src="my.png"/>在第一个单词之前.选择.

纯JavaScript或jQuery代码都是受欢迎的,jQuery更受欢迎.谢谢.

javascript jquery

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

如何以嵌套方式使用 va_list 对象,尤其是在 gcc x64 编译器上

请查看我的小 C/C++ 程序。

// va_nest.c
#include <stdarg.h>
#include <stdio.h>

void nest2(const char *fmt, ...)
{
    va_list args2, args_dig;
    int *pi, i;

    va_start(args2, fmt);

    args_dig = va_arg(args2, va_list); 
        // !!! try to fetch the nested va_list object.
    pi = va_arg(args_dig, int*);
    i = va_arg(args_dig, int);

    printf("Inner: @%p , %d\n", pi, i);

    va_end(args2);
}

void nest1(const char *fmt, ...)
{
    va_list args1;
    va_start(args1, fmt);

    nest2(fmt, args1);

    va_end(args1);
}

int main()
{
    int var = 11;
    printf("Outer: @%p , %d\n", &var, var);
    nest1("abc", …
Run Code Online (Sandbox Code Playgroud)

linux gcc glibc g++

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

Windows 为 ANSI 版本 WM_CHAR 生成 UTF8 序列?为什么我看不到它?

在今天(2023.01)的 MSDN https://learn.microsoft.com/en-us/windows/win32/inputdev/wm-char中,微软表示:

\n
\n

...否则(使用 ANSI 版本的 RegisterClass),系统在当前进程代码页中提供字符,可以在 Windows 版本 1903(2019 年 5 月更新)及更高版本中将其设置为 UTF-8 。

\n
\n

但是,我只是看不到 WM_CHAR 以 UTF8 序列呈现 Unicode 字符。我做错了吗,或者文档是错误/误导性的?

\n

我在Win10.21H2上进行了实验,使用的是Keyview2A.exe v1.8,它基于Charles Petzold在他的名著Programming Windows 5th-ed (1998)中的Keyview2演示程序。

\n

我正在尝试 Win10.21H2 。

\n

首先,非 UTF8ACP 情况表明 KeyviewA 工作正常。

\n

我尝试输入一个汉字\xe7\x94\xb5,即 U+7535,GBK 编码B5 E7。

\n

非 UTF8APC,输入非 ASCII 字符

\n

非 UTF8APC,好的,我们在代码页 936 中得到 ANSI 序列

\n

其次,UTF8ACP 情况不会给出 KeyviewA UTF8 序列。

\n

我刚刚得到 0x3F(?),叹息!

\n

UTF8ACP,输入 Unicode 字符

\n

UTF8ACP,在 WM_CHAR 中看不到 UTF8 序列

\n

第三,SBCS中的那些角色呢?

\n

SBCS = 单字节字符集。\nDBCS = 双字节字符集。\nMBCS = …

unicode winapi

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

XSLT,如何按元素名称排序

我是 XSLT 的新手。我只是提出一个问题,希望有人可以提供帮助。

假设我有一个源 xml,

<?xml version="1.0"?>
<docroot>
    <vc6>foo</vc6>
    <vc7>bar7</vc7>
    <vc8 arch="x64">amd64demo</vc8>
    <vc7>foo7</vc7>
    <vc6>bar</vc6>
</docroot> 
Run Code Online (Sandbox Code Playgroud)

我想把它变成:

<?xml version="1.0"?>
<docroot>
    <vc6>bar</vc6>
    <vc6>foo</vc6>
    <vc7>bar7</vc7>
    <vc7>foo7</vc7>
    <vc8 arch="x64">amd64demo</vc8>
</docroot> 
Run Code Online (Sandbox Code Playgroud)

那是,

  1. 的子元素应按元素名称排序,因此<vc6>位于> 之前<vc7。
  2. 如果两个子元素具有相同的元素名称,则应按其文本值对它们进行排序,因此 'bar' 位于 'foo' 之前。

怎么写xsl?谢谢你。

xml xslt

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

在shell提示符上显示退出代码总是0,为什么

我希望在Bash shell提示符下显示退出代码,以便我可以轻松地知道上一个命令是否成功运行,但是,它总是显示0.这有什么问题吗?那么有可能达到预期的效果吗?

 PS1="\t <\w> ERR:$(echo $?) \$ "
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

- 关于openSUSE 11.4的Bash 4.1.10

bash

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

如何从windbg内核调试器检查用户线程调用堆栈?

我的 exe-once 测试程序调用CancelIo并且它被阻止,我想调查它在哪个函数中被阻止,因此,当它被阻止时,我使用 Windbg 远程闯入机器,并尝试找出它。

如图中标记为黄色的,我的 EXE 有两个线程,fffffa8013958b60并且fffffa8013aa1060. 我已经知道是fffffa8013aa1060那个人打来的CancelIo。

那么,如何显示线程当前的调用堆栈呢fffffa8013aa1060?

在此输入图像描述

1: kd> !process fffffa8014c25170 2
PROCESS fffffa8014c25170
    SessionId: 1  Cid: 0ad4    Peb: 7fffffdf000  ParentCid: 07b8
    DirBase: 2b451000  ObjectTable: fffff8a002e61620  HandleCount:  12.
    Image: exe-once.exe

        THREAD fffffa8013958b60  Cid 0ad4.0724  Teb: 000007fffffdd000 Win32Thread: 0000000000000000 WAIT: (UserRequest) UserMode Non-Alertable
            fffffa8013aa1060  Thread

        THREAD fffffa8013aa1060  Cid 0ad4.01e8  Teb: 000007fffffdb000 Win32Thread: 0000000000000000 WAIT: (DelayExecution) KernelMode Non-Alertable
            fffffa8013aa1420  Semaphore Limit 0x1
Run Code Online (Sandbox Code Playgroud)

windbg

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

为什么type('string')似乎在python cgi中返回null字符串

我正在阅读Mark Lutz的Programming Python 3rd editon,我对一个问题很困惑:type('something')总是会产生一个空字符串.

有人可以解释一下吗?

上下文信息:

我在脚本中添加了一行 $CODEROOT\pp3e\Internet\Web\cgi-bin\tutor0.py

#!/usr/bin/python
#######################################################
# runs on the server, prints html to create a new page;
# url=http://localhost/cgi-bin/tutor0.py
#######################################################

print "Content-type: text/html\n"
print "<TITLE>CGI 101</TITLE>"
print "<H1>A First CGI script</H1>"
print '<p>[%s]'%type('apple') # ? I add this line
print "<P>Hello, CGI World!</P>"
Run Code Online (Sandbox Code Playgroud)

对于添加的行,我希望在浏览器中看到[<type 'str'>],但我实际上看到了[].

在此输入图像描述

启动HTTP服务器的python是 $CODEROOT\pp3e\Internet\Web\webserver.py

#########################################################################
# implement HTTP web server in Python which knows how to serve HTML
# pages and run server …
Run Code Online (Sandbox Code Playgroud)

python cgi

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

C++ 命名法,将谁绑定到谁?

请看这个简单的 C++ 代码。

\n
// rrlv1.cpp\n#include <utility>\nclass CInt {\npublic: int mi;\n}; \nvoid rrlv(CInt&& iobj) {\n    int old = iobj.mi;\n    iobj.mi = 4;\n}\n\nint main() {\n    CInt i1{1};\n    rrlv(i1);  // compile ERROR, should use std::move(i1)\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这是糟糕的代码,但编译器错误消息很有趣。

\n

海湾合作委员会-12:

\n
rrlv1.cpp:13:15: error: cannot bind rvalue reference of type \xe2\x80\x98CInt&&\xe2\x80\x99 to lvalue of type \xe2\x80\x98CInt\xe2\x80\x99\n   13 |         rrlv0(i1);\n      |               ^~\nrrlv1.cpp:6:19: note:   initializing argument 1 of \xe2\x80\x98void rrlv0(CInt&&)\xe2\x80\x99\n    6 | void rrlv0(CInt&& iobj) {\n      |            ~~~~~~~^~~~\n
Run Code Online (Sandbox Code Playgroud)\n

视觉 C++ 2019 16.11:

\n …

c++

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

标签 统计

c ×2

python ×2

bash ×1

c++ ×1

c-preprocessor ×1

cgi ×1

g++ ×1

gcc ×1

glibc ×1

javascript ×1

jquery ×1

linux ×1

multicast ×1

stringification ×1

unicode ×1

winapi ×1

windbg ×1

xml ×1

xslt ×1