我写了一个小程序,从中获取一些输入参数*argv[]并打印它们.几乎在所有用例中,我的代码都运行得很好.只有在我想要作为参数传递的字符串末尾使用多个感叹号时才会出现问题...
这有效:
./program -m "Hello, world!"
Run Code Online (Sandbox Code Playgroud)
这不起作用:
./program -m "Hello, world!!!!"
Run Code Online (Sandbox Code Playgroud)
^^如果我这样做,程序输出要么是该字符串的两倍,要么是我在./program之前输入的命令.
但是,我绝对不明白:以下,奇怪的是,它的工作原理:
./program -m 'Hello, world!!!!'
Run Code Online (Sandbox Code Playgroud)
^^输出正是......
Hello, world!!!!
Run Code Online (Sandbox Code Playgroud)
......正如所希望的那样.
所以,我的问题是:
""是字符串和''单个字符.那么为什么我在使用时会得到所需的结果'',而不是在""我应该使用时(根据我的理解)?我的代码的相关部分:
// this is a simplified example that, in essence, does the same
// as my (significantly longer) code
int main(int argc, char* argv[]) {
char *msg = (char *)calloc(1024, sizeof(char));
printf("%s", strcat(msg, argv[2])); // argv[1] is "-m"
free(msg);
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试先将内容复制argv[2]到char*缓冲区中并附加一个缓冲区 …
我正在尝试过滤具有某些 ID 的 CAN 帧,如下所述:https: //landlock.io/linux-doc/landlock-v8/networking/can.html#raw-protocol-sockets-with-can-filters-sock -生的
我的部分代码:
struct can_filter rfilter[4];
if ((s = socket(PF_CAN, SOCK_RAW, CAN_RAW)) < 0) {
fprintf(stderr, "Error while opening socket.\n");
exit(EXIT_FAILURE);
}
rfilter[0].can_id = 0x0D6 | CAN_INV_FILTER;
rfilter[0].can_mask = CAN_SFF_MASK;
rfilter[1].can_id = 0x0D8 | CAN_INV_FILTER;
rfilter[1].can_mask = CAN_SFF_MASK;
rfilter[2].can_id = 0x0E4 | CAN_INV_FILTER;
rfilter[2].can_mask = CAN_SFF_MASK;
rfilter[3].can_id = 0x77F | CAN_INV_FILTER;
rfilter[3].can_mask = CAN_SFF_MASK;
setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, &rfilter, sizeof(rfilter));
Run Code Online (Sandbox Code Playgroud)
如果我只使用四个过滤器之一并注释掉其他三个,它就会按预期工作。如果我使用所有四个过滤器,它根本不起作用。在这种情况下,我仍然可以接收 CANbus 接口上的所有内容。
所以,我的猜测是我的过滤器以某种方式相互抵消了?!我需要更改什么才能过滤 CAN ID 0x0D6、0x0D8、0x0E4 和 0x77F?
我可以使用Matplotlib的plt.psd()方法绘制从RTL-SDR接收到的信号,结果如下图所示:
我要达到的最终目标是检索某个功率水平(例如-20)以上的所有峰值的坐标。当我从时域接收信号时,我必须先将它们转换为频域,这是通过以下代码完成的:
signal = []
sdr = RtlSdr()
sdr.sample_rate = 2.8e
sdr.center_freq = 434.42e6
samples = sdr.read_samples(1024*1024)
signal.append(samples)
from scipy.fftpack import fft, fftfreq
window = np.hanning(len(signal[0]))
sig_fft = fft(signal[0]*window)
power = 20*np.log10(np.abs(sig_fft))
sample_freq = fftfreq(signal[0].size, sdr.sample_rate/signal[0].size)
plt.figure(figsize=(9.84, 3.94))
plt.plot(sample_freq, power)
plt.xlabel("Frequency (MHz)")
plt.ylabel("Relative power (dB)")
plt.show()
idx = np.argmax(np.abs(sig_fft))
freq = sample_freq[idx]
peak_freq = abs(freq)
print(peak_freq)
Run Code Online (Sandbox Code Playgroud)
此代码产生以下图:
我无法实现的是,首先,要消除所有噪声并仅绘制一条细线,如psd()图中所示。第二,在x轴上显示正确的频率值。
因此,我的问题是:
[编辑]
这是我对welch()方法的尝试:
from scipy.signal import welch
sample_freq, power = welch(signal[0], sdr.sample_rate, window="hamming")
plt.figure(figsize=(9.84, 3.94))
plt.semilogy(sample_freq, power)
plt.xlabel("Frequency (MHz)")
plt.ylabel("Relative …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的 macOS 10.14 系统上运行mqtt-spy-1.0.0.jar,但它无法启动,返回以下错误消息:

据开发人员称,如果系统上缺少 JavaFX,则会导致此问题。
如下所示,我的系统上安装了最新版本的 Oracle JDK,但是,我知道 Oracle 已从 v11 中的 JDK 中排除了 JavaFX。
所以我从 GluonHQ下载了JavaFX并按照他们的说明开始。
尽管在 ~/.bash_profile 中正确设置了两个必需的变量,但 mqtt-spy-1.0.0.jar 仍然返回第一个屏幕截图中显示的错误消息......
我还需要做什么或者我需要做什么不同的事情来运行 mqtt-spy?