我有一个8个字符string代表一个十六进制数字,我需要将其转换为int.这种转换必须保留字符串"80000000"和更高的位模式,即这些数字应该是负数.不幸的是,天真的解决方案:
int hex_str_to_int(const string hexStr)
{    
    stringstream strm;
    strm << hex << hexStr;
    unsigned int val = 0;
    strm >> val;
    return static_cast<int>(val);
}
如果val > MAX_INT(返回值为0),则对我的编译器不起作用.更改val的类型int也会导致较大的数字为0.我在SO上尝试了几种不同的解决方案,但尚未成功.
这就是我所知道的:
sizeof(int) 我的代码将在每个架构上运行至少4个.long到int的结果INT_MAX,当值过大.这是非常难以正确地做到,或者至少它已经适合我.有谁知道这个便携式解决方案?
更新:
更改static_cast为reinterpret_cast导致编译器错误.评论促使我尝试C风格的演员:return (int)val在上面的代码中,它工作.  在这台机器上.  在其他架构上,这仍然是安全的吗?
我在OpenVMS上使用SAS 9.2通过一个用filename语句指定的套接字连接到外部数据源:
filename extsrc SOCKET "extserver:port" recfm=v;
data foo;
infile extsrc;
input;
.... some statements to read stuff ...;
run;
99%的情况下(这应该)有效.但是,偶尔应该在远程端口上侦听的程序不是.目前,这会导致程序退出并显示错误:
Error: Connection refused.
之后我们再试一次,它通常有效.然而,这变得乏味,所以我想在程序中检测到这个错误并在那里处理它.有人知道在SAS中检测此类错误的方法吗?
我已经尝试使用fileref()函数检查fileref extsrc的有效性,但这只返回-20005,这意味着fileref已分配但未指向本地文件(这是真的).当我在datastep中使用fileref时,错误才会变得明显,所以我想做的事情是:
data _null_;
rc=infile extsrc;
if rc=0 then do;
  //whatever I want to do;
end;
else do;
  //throw some error and try again later;
end;
run;
[update1]我正在尝试下面的建议,但是在真正的heisenbug方式中,问题在过去几天没有出现,所以我不确定最终的解决方案是什么.[/ UPDATE1]
[update2]错误终于再次出现.根据cmjohns的回答,发生此错误后,syserr的值为1012.我现在将观察syserr的值,如果失败则再次尝试固定次数.[/ UPDATE2]
[update3]我已经有一些代码运行了几天,现在有效.另外一个问题是(当然)如果&syserr得到一个高于6的值,则出现错误情况,因此根据您的errorabend/noerrorabend设置,这会导致程序完全结束,或者导致程序继续obs=0处于syntaxchek模式.两者都不可取.解决方案是options noerrorabend nosyntaxcheck在产生此错误的datastep之前设置.此外,如果发生错误,我必须清除文件名extsrc并重新分配它.最后,一旦完成这段代码,我就恢复了errorabend.如果我恢复nosyntaxcheck,这会导致SAS检测到先前的错误情况并在该点切换到语法检查模式,这也是不合需要的.[/ UPDATE3]
我们目前有一个用COBOL编写的大型业务关键型应用程序,运行在OpenVMS(Integrity/Itanium)上.
随着时间的推移,人们越来越多地猜测Itanium架构的生命周期.在开放,当然,但就像文章没有提到了这个和这个画一个令人担忧的画面.虽然我找不到任何支持这一点的官方消息,但我们惠普公司的走廊甚至还有嘀咕着OpenVMS和HP COBOL.
我无法相信我们是孤身一人.
我看到它的方式,有几个选择:
请注意,不依赖于专有DBMS; 数据库是基于ISAM文件的.
所以...我的问题是:
当他们选择的平台是OpenVMS和COBOL时,Itanium即将淘汰以保持业务连续性的其他人面临着什么?
更新:
我们已经得到当地惠普代表的官方保证,至少在2022年之前我们将支持Integrity/Itanium/OpenVMS.我想这意味着整个问题不仅仅是关于平台,还有更多关于语言(COBOL)的问题.
我需要在C++中获得JPEG的图像尺寸.我正在寻找一种相当简单的方法来实现它,或者是一个提供该功能的小型库.我在OpenVMS上使用C++,所以任何外部库都可能需要适应我们系统上的编译 - 所以请不要发布给大型,封闭源库的链接!
有没有人遇到任何可能做到这一点的事情,或者理解JPEG文件格式(我想我可能在这里指的是JFIF文件格式)告诉我如何开始自己的解决方案呢?
我们在OpenVMS Alpha和Integrity服务器上运行批处理文件.到目前为止,它们都是用COBOL编写的.您可以想象,有很多原因导致无法维持该过程.
与此同时,我们拥有一支使用Eclipse并且非常了解Java的开发人员团队.是否可以将Eclipse与OpenVMS一起使用?
如何从OpenVMS上正在运行的Java进程中检索线程转储?该过程不支持JMX.我正在寻找类似kill -QUITUnix或Ctrl+BreakWindows的东西.
编辑:我在这里找到了答案:http: //h18012.www1.hp.com/java/documentation/1.6.0/ivms/docs/user_guide.html#javaenable_sigquit_mailbox
类型的void (*)(int)参数与类型的参数不兼容__sighnd64_t
下面是我的简单代码:
#include <iostream>
#include <string>
#include <signal.h>
#include <ctype>
#include <stdlib.h>
#include <stdio.h>
typedef struct mystrcut
{
  int a;
  char *b;
} mystr;
void set_string ( char **, const char * );
void my_handler(int s)
{
    printf("Caught signal %d\n",s);
    exit(1);
}
int main()
{
    const std::string str1[] = {"hello1", "hello2"};
    char str2[50];
    size_t size1 = str1[1].size();
    cout << size1;
    memcpy (str2, str1[1].c_str(), size1);
    cout << str2;
    mystr *m = NULL;
    m = new mystrcut;
    m->a …我想知道哪个函数在C语言中为OpenVMS提供最佳的精度/准确度.
我们有一台运行OpenVMS V8.3-1H1的HP Integrity rx2660服务器.
到目前为止,我的搜索指向$ GETTIM_PREC,它提供100纳米分辨率但毫秒精度.它比这更好吗?
问候
我在vms中有一个工具xyz.我想获取安装它的位置.例如在unix中我们可以通过使用哪个命令来实现这一点.所以请帮我vms相当于这个命令.
我认为演示问题的最简单方法是举个例子.代码:
PROGRAM CONSTANTSTRING(OUTPUT);
CONST
    C_MaxLength = 30;
VAR
    small_string : VARYING[5] OF CHAR VALUE 'alpha';
PROCEDURE LocalProc(
    localstring : VARYING[C_MaxLength] of CHAR
);
BEGIN
    writeln('localstring length: ', localstring.LENGTH);
    writeln('localstring size: ', SIZE(localstring.BODY));
    writeln('C_MaxLength: ', C_MaxLength);
END;
BEGIN
    writeln('small_string length: ', small_string.LENGTH);
    writeln('small_string size: ', SIZE(small_string.BODY));
    writeln('C_MaxLength: ', C_MaxLength);
    LocalProc(small_string);
END.
编译:
>pascal /version
HP Pascal I64 V6.1-116 on OpenVMS I64 V8.4
>pascal constantstringinit
>link constantstringinit
>run constantstringinit
并输出:
small_string length:          5
small_string size:          5
C_MaxLength:         30
localstring length:          5
localstring …