小编Ham*_*mza的帖子

检查环境变量

我试图检查环境变量的值,并根据值做某些事情,只要变量设置它就可以正常工作.当它不是我得到一大堆错误时(因为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)

linux bash shell

62
推荐指数
4
解决办法
7万
查看次数

C:跨平台的RS-232串口库?

我正在寻找一个开源的跨平台库,用于处理C语言中的串行端口,这就是令人敬畏的PySerial库(不幸的是我必须在这个应用程序中使用C).

我只找到了这个:http://www.teuniz.net/RS-232/,而且似乎没有提到OS X的兼容性.

c cross-platform serial-port interfacing

23
推荐指数
4
解决办法
3万
查看次数

C:警告的解决方法:表达式中的整数溢出?

我正在尝试组织我的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,它就像魅力一样)

有没有办法将该常量强制转换为整数以使编译器满意?

非常感谢,哈姆扎.

c embedded

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

C# - TcpClient - 检测流的结束?

我试图将一个古老的网络摄像头连接到我的计算机,我陷入了一个非常根本的问题 - 检测流的结束.

我正在使用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.

c# sockets networkstream tcpclient

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

C:使用printf时出现分段错误

这可能很简单,但我似乎无法让它工作.

我有这个非常简单的代码片段:

#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)

但我仍然没有得到它.

评论将不胜感激,谢谢.

c printf pointers segmentation-fault

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

ImageMagick - 合并并居中多个图像

我试图将多个不同维度的PNG文件附加到单个组合图像中.

我希望个别'层'居中.

这就是我想以图片形式实现的目标:

.

一个简单的:

convert a.png b.png c.png -flatten combined.png
Run Code Online (Sandbox Code Playgroud)

结果是:

.

...而且我能够通过手动指定偏移('-page +X+Y')来集中所有内容,但我想知道是否有自动实现此目的的方法.

command-line imagemagick

6
推荐指数
2
解决办法
5716
查看次数

WPF中的可拖动画布使用"拇指"

我试图在我的应用程序中实现一个非常简单的"拖动"机制(由嵌套在"父"画布中的多个画布组成),我想出了以下几点代码:

(仅显示相关位以节省空间)

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)

c# wpf wpf-controls visual-studio

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

React.js状态更改的侦听器

我有一个带有几个输入字段的组件,这些输入字段使用所valueLink={this.linkState('foo')}提供的功能来更新组件的状态React.addons.LinkedStateMixin

在此之前,我使用onChange处理程序通过Websocket连接将更改传达回服务器,因此我想知道是否可以某种方式复制此行为,并使用某种“状态更改侦听器”将状态更改发布回去?

谢谢。

javascript javascript-events reactjs

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

C:使用stdarg.h的变量参数列表

我正在尝试变量参数列表并看到一些奇怪的结果......

我正在测试的代码是:

#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()会足够明智地处理它,但似乎并非如此.

有什么建议可以处理吗?

非常感谢.

c variadic-functions

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

WPF:在画布中选择子控件

关于 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_MouseMoveparentCanvas_MouseLeave方法?

此外,我在事件处理程序中访问画布本身的方式看起来有点古怪,我做了一些事情:

    private void parentCanvas_MouseLeave(object sender, MouseEventArgs e)
    {
        Canvas c = (Canvas)sender;
        c.Background = Brushes.Blue;
    }
Run Code Online (Sandbox Code Playgroud)

这是访问它的正确方式还是有更优雅的方式来做到这一点?

非常感谢,
哈姆扎。

c# wpf visual-studio-2010 wpf-controls

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