我试图检查环境变量的值,并根据值做某些事情,只要变量设置它就可以正常工作.当它不是我得到一大堆错误时(因为BASH试图将我指定的字符串与未定义的变量进行比较,我猜)
我尝试实施额外检查以防止它发生但没有运气.我正在使用的代码块是:
#!/bin/bash
if [ -n $TESTVAR ]
then
if [ $TESTVAR == "x" ]
then
echo "foo"
exit
elif [ $TESTVAR == "y" ]
then
echo "bar"
exit
else
echo "baz"
exit
fi
else
echo -e "TESTVAR not set\n"
fi
Run Code Online (Sandbox Code Playgroud)
这是输出:
$ export TESTVAR=x
$ ./testenv.sh
foo
$ export TESTVAR=y
$ ./testenv.sh
bar
$ export TESTVAR=q
$ ./testenv.sh
baz
$ unset TESTVAR
$ ./testenv.sh
./testenv.sh: line 5: [: ==: unary operator expected
./testenv.sh: line 9: [: ==: unary operator …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个开源的跨平台库,用于处理C语言中的串行端口,这就是令人敬畏的PySerial库(不幸的是我必须在这个应用程序中使用C).
我只找到了这个:http://www.teuniz.net/RS-232/,而且似乎没有提到OS X的兼容性.
我正在尝试组织我的UART库并通过添加一些#define来对它进行一些美化,以便我可以在以后自定义它而不必深入研究代码,但我似乎无法使用下面的代码:
#define FOSC 8000000
#define BAUDRATE 9600
#define BRGVAL (FOSC/2)/(16*BAUDRATE)-1
void uart_init(){
U1BRG = BRGVAL;
}
Run Code Online (Sandbox Code Playgroud)
在计算之后BRGVAL变为25.0416667,并且因为它不是整数,所以当我将它分配给U1BRG时,我得到以下警告:
UART.c:在函数'uart_init'中:
UART.c:24:警告:表达式中的整数溢出
...而且代码根本无法在目标硬件上运行.(如果我手动输入U1BRG = 25,它就像魅力一样)
有没有办法将该常量强制转换为整数以使编译器满意?
非常感谢,哈姆扎.
我试图将一个古老的网络摄像头连接到我的计算机,我陷入了一个非常根本的问题 - 检测流的结束.
我正在使用TcpClient与相机通信,我实际上可以看到它传输命令数据,这里没有问题.
List<int> incoming = new List<int>();
TcpClient clientSocket = new TcpClient();
clientSocket.Connect(txtHost.Text, Int32.Parse(txtPort.Text));
NetworkStream serverStream = clientSocket.GetStream();
serverStream.Flush();
byte[] command = System.Text.Encoding.ASCII.GetBytes("i640*480M");
serverStream.Write(command, 0, command.Length);
Run Code Online (Sandbox Code Playgroud)
回读响应是问题的开始.我最初认为像下面的一些代码一样简单:
while (serverStream.DataAvailable)
{
incoming.Add(serverStream.ReadByte());
}
Run Code Online (Sandbox Code Playgroud)
但它没有,所以这次使用ReadByte()进行了另一个版本.描述说明:
从流中读取一个字节并将流中的位置前进一个字节,如果在流的末尾则返回-1.
所以我想我可以实现以下几点:
Boolean run = true;
int rec;
while (run)
{
rec = serverStream.ReadByte();
if (rec == -1)
{
run = false;
//b = (byte)'X';
}
else
{
incoming.Add(rec);
}
}
Run Code Online (Sandbox Code Playgroud)
不,仍然无法正常工作.我实际上可以看到数据进入和某个点之后(这并不总是相同的,否则我每次只能读取那么多字节)我开始得到0其余元素的值并且它不会停止直到我手动停止执行.这是它的样子:

所以我的问题是,我错过了一些基本的东西吗?如何检测流的结束?
非常感谢,
H.
这可能很简单,但我似乎无法让它工作.
我有这个非常简单的代码片段:
#include <stdio.h>
#include <string.h>
int main(void)
{
char buf[100];
char *p = buf;
strcpy(p, "Test string");
printf("%s\n", *p);
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时会导致分段错误.GDB输出:
Program received signal SIGSEGV, Segmentation fault.
0xb76af3b3 in strlen () from /lib/i686/cmov/libc.so.6
Run Code Online (Sandbox Code Playgroud)
但我仍然没有得到它.
评论将不胜感激,谢谢.
我试图将多个不同维度的PNG文件附加到单个组合图像中.
我希望个别'层'居中.
这就是我想以图片形式实现的目标:

一个简单的:
convert a.png b.png c.png -flatten combined.png
Run Code Online (Sandbox Code Playgroud)
结果是:

...而且我能够通过手动指定偏移('-page +X+Y')来集中所有内容,但我想知道是否有自动实现此目的的方法.
我试图在我的应用程序中实现一个非常简单的"拖动"机制(由嵌套在"父"画布中的多个画布组成),我想出了以下几点代码:
(仅显示相关位以节省空间)
MainWindow.xaml
<Canvas Name="parentCanvas" Background="#FFE8CACA">
<Canvas Name="myCanvas" Height="100" Width="200" Background="#FFB4FFB4">
<Thumb Name="myThumb" Canvas.Left="0" Canvas.Top="0" Background="Blue" Width="200" Height="20" DragDelta="onDragDelta" />
</Canvas>
<!-- debug -->
<Button Content="Zero" Height="51" Name="button1" Width="46" Click="button1_Click" Canvas.Left="14" Canvas.Top="302" />
<Label Name="pos" Width="499" Canvas.Left="77" Canvas.Top="302" Height="26" />
<Label Name="changes" Height="28" Canvas.Left="77" Canvas.Top="325" Width="499" />
</Canvas>
Run Code Online (Sandbox Code Playgroud)
MainWindow.xaml.cs
void onDragDelta(object sender, DragDeltaEventArgs e)
{
Canvas.SetLeft(myCanvas, e.HorizontalChange);
Canvas.SetTop(myCanvas, e.VerticalChange);
//debug info
pos.Content = "Left: " + Canvas.GetLeft(myCanvas) + ", Top: " + Canvas.GetTop(myCanvas);
changes.Content = "Horizontal: " + e.HorizontalChange + …Run Code Online (Sandbox Code Playgroud) 我有一个带有几个输入字段的组件,这些输入字段使用所valueLink={this.linkState('foo')}提供的功能来更新组件的状态React.addons.LinkedStateMixin。
在此之前,我使用onChange处理程序通过Websocket连接将更改传达回服务器,因此我想知道是否可以某种方式复制此行为,并使用某种“状态更改侦听器”将状态更改发布回去?
谢谢。
我正在尝试变量参数列表并看到一些奇怪的结果......
我正在测试的代码是:
#include <stdio.h>
#include <stdarg.h>
void foo(int param1, int param2, ...)
{
int param3 = 0;
va_list ap;
va_start(ap, param2);
param3 = va_arg(ap, int);
va_end(ap);
printf("param3: %d\n", param3);
}
int main(void)
{
foo(1,1);
foo(1,1,42);
}
Run Code Online (Sandbox Code Playgroud)
该代码段的输出是:
param3: -1073748472
param3: 42
Run Code Online (Sandbox Code Playgroud)
对于第二个调用:'foo(1,1,42)',一切似乎都按预期工作.
对于第一个调用:'foo(1,1)',结果看起来像一个未初始化的int,虽然我在函数开始时首次初始化时将其设置为0.
我希望能够依赖于如果未调用参数,结果变量应该具有值0的事实.我原本以为va_arg()会足够明智地处理它,但似乎并非如此.
有什么建议可以处理吗?
非常感谢.
关于 WPF 的一个快速问题:如何在画布/网格中选择子元素?
例如,在以下 XAML 代码段中:
<Canvas Name="parentCanvas" Width="200" Height="200" Background="AliceBlue" MouseMove="parentCanvas_MouseMove" MouseLeave="parentCanvas_MouseLeave">
<Border Name="border1" Margin="10" Height="100" Width="180" Background="Maroon" Canvas.Top="47" />
</Canvas>
Run Code Online (Sandbox Code Playgroud)
...如何访问border1内部parentCanvas_MouseMove和parentCanvas_MouseLeave方法?
此外,我在事件处理程序中访问画布本身的方式看起来有点古怪,我做了一些事情:
private void parentCanvas_MouseLeave(object sender, MouseEventArgs e)
{
Canvas c = (Canvas)sender;
c.Background = Brushes.Blue;
}
Run Code Online (Sandbox Code Playgroud)
这是访问它的正确方式还是有更优雅的方式来做到这一点?
非常感谢,
哈姆扎。
c ×4
c# ×3
wpf ×2
wpf-controls ×2
bash ×1
command-line ×1
embedded ×1
imagemagick ×1
interfacing ×1
javascript ×1
linux ×1
pointers ×1
printf ×1
reactjs ×1
serial-port ×1
shell ×1
sockets ×1
tcpclient ×1